Sunteți pe pagina 1din 18

Procedimientos almacenados

con parametros de salida


CREATE PROC[EDURE] <Nombre Procedimiento>
[
{@parámetro tipoDatos} [= predeterminado] [OUTPUT]
]
[,...n]
[WITH
{
RECOMPILE
| ENCRYPTION
}
]
AS
Sentencias SQL [...n]
•Ejemplo simple: se realiza select de tabla
persona, y se calcula el promedio de las edades
de todas las personas. Ese valor se guarda en
parametro de salida….

create procedure promedioedad (@prom int


output)
as
select nombre, apellido, datediff(year,
fechanacimiento, getdate()) from persona
select @prom=avg(datediff(year, fechanacimiento,
getdate())) from persona
• Al ejecutar el procedimiento, creo una variable
que guarde el contenido del parametro de
salida, puesto que sino, se pierde (es local al
procedimiento).

DECLARE @promedio int


EXECUTE promedioedad @prom=@promedio
OUTPUT
IF @promedio<20
select 'El promedio de edad de estas personas es
menor a 20: ' +cast(@promedio as varchar)
ELSE
select 'El promedio de edad de estas personas es
mayor de 20: ' +cast(@promedio as varchar)
DECLARE @promedio int
EXECUTE promedioedad @prom=@promedio
OUTPUT

IF @promedio<20
print 'El promedio de edad de estas personas es
menor a 20: ' +cast(@promedio as varchar)
ELSE
print 'El promedio de edad de estas personas es
mayor de 20: ' +cast(@promedio as varchar)
• Con parametros de entrada y
parametros de salida
• PA que devuelve el costo basico de una
asignatura pasada como parametro de
entrada. Se devuelve en el parametro de
salida.
create procedure costeasig @nombre varchar(50),
@coste int output
as
IF (SELECT COUNT(*) FROM asignatura WHERE
nombre=@nombre) = 0
print 'no existe asignatura'
else
select @coste=costebasico from asignatura where
nombre=@nombre
declare @cos int
exec costeasig 'mate', @coste=@cos output
if @cos>30
print 'asignatura muy cara: '+cast(@cos as
varchar)
else
print 'precio asignatura esta ok: '+cast(@cos as
varchar)
• Lo mismo usando ademas RETURN
create procedure costeasig2 @nombre
varchar(50), @coste int output
as
IF (SELECT COUNT(*) FROM asignatura WHERE
nombre=@nombre) = 0
RETURN(1)
else
select @coste=costebasico from asignatura where
nombre=@nombre
return(0)
declare @cos int, @est int
exec @est=costeasig2 'mate', @coste=@cos output
if @est=0
begin
print 'asignatura existe'
if @cos>30
print 'asignatura muy cara: '+cast(@cos as varchar)
else
print 'precio asignatura esta ok: '+cast(@cos as
varchar)
end
else
if @est=1
print 'no existe esta asignatura'
• Ejercicio.
• PA que calcule la cantidad de alumnos
que inscribieron un ramo especifico. Si la
cantidad es menor de 10, debe imprimir
un mensaje por pantalla.
• El nombre del ramo sera ingresado.
Verificar existencia.
• Debe mostrar el valor calculado.
• create procedure cantalumnos @nombre
varchar(50), @cantidad int output
• as
• IF exists (SELECT * FROM asignatura WHERE
nombre=@nombre)
• begin
• select @cantidad= count(*) from
alumnoasignatura, asignatura where
alumnoasignatura.idasignatura=asignatura.idasi
gnatura and asignatura.nombre=@nombre
• RETURN(0)
• end
• else
• return(1)
• declare @cant int, @est int
• exec @est=cantalumnos 'ingles', @cantidad=@cant
output
• if @est=0
• begin
• print 'asignatura existe'
• if @cant>10
• print 'Bien, ramo tiene mas de 10 alumnos:
'+cast(@cant as varchar)
• else
• print 'Cantidad de alumnos muy baja:
'+cast(@cant as varchar)
• end
• else
• if @est=1
• print 'no existe esta asignatura'
• Ejercicio.
• PA que calcule el promedio de creditos de
una titulacion especifica a ser ingresada.
Verificar existencia.
• Debe mostrar el valor calculado.
• Debe imprimir mensajes por pantalla, si el
promedio de creditos es mayor o menor
de 6.
• create procedure creditos @nombre
varchar(20), @suma int output
• as
• IF exists (SELECT * FROM titulacion WHERE
nombre=@nombre)
• begin
• select @suma= avg(creditos) from asignatura,
titulacion where
asignatura.idtitulacion=titulacion.idtitulacion and
titulacion.nombre=@nombre
• RETURN(0)
• end
• else
• return(1)
• declare @sum int, @est int
• exec @est=creditos 'ciencias', @suma=@sum output
• if @est=0
• begin
• print 'titulacion existe'
• if @sum>6
• print 'Promedio de creditos de titulacion es muy alto '
+cast(@sum as varchar)
• else
• print 'Promedio de creditos esta dentro de lo pedido '
+cast(@sum as varchar)
• end
• else
• if @est=1
• print 'no existe esta titulacion'

S-ar putea să vă placă și