123 - Procedimientos almacenados (parámetros de salida)


Problema:

Eliminamos el procedimiento almacenado "pa_promedio", si existe:

 if object_id('pa_promedio') is not null
  drop proc pa_promedio;

Creamos un procedimiento almacenado al cual le enviamos 2 números decimales y retorna el promedio:

 create procedure pa_promedio
  @n1 decimal(4,2),
  @n2 decimal(4,2),
  @resultado decimal(4,2) output
  as 
   select @resultado=(@n1+@n2)/2;

Lo ejecutamos enviando diferentes valores:

  declare @variable decimal(4,2)
  execute pa_promedio 5,6, @variable output
  select @variable

  execute pa_promedio 5.3,4.7, @variable output
  select @variable

  execute pa_promedio 9,10, @variable output
  select @variable;

Trabajamos con la tabla "libros" de una librería.
Eliminamos la tabla si existe y la creamos nuevamente:

 if object_id('libros') is not null
  drop table libros;

 create table libros(
  codigo int identity,
  titulo varchar(40),
  autor varchar(30),
  editorial varchar(20),
  precio decimal(5,2),
  primary key(codigo) 
 );

Ingresamos algunos registros:

 insert into libros values ('Uno','Richard Bach','Planeta',15);
 insert into libros values ('Ilusiones','Richard Bach','Planeta',12);
 insert into libros values ('El aleph','Borges','Emece',25);
 insert into libros values ('Aprenda PHP','Mario Molina','Nuevo siglo',50);
 insert into libros values ('Matematica estas ahi','Paenza','Nuevo siglo',18);
 insert into libros values ('Puente al infinito','Richard Bach','Sudamericana',14);
 insert into libros values ('Antología','J. L. Borges','Paidos',24);
 insert into libros values ('Java en 10 minutos','Mario Molina','Siglo XXI',45);
 insert into libros values ('Antología','Borges','Planeta',34);

Eliminamos el procedimiento almacenado "pa_autor_sumaypromedio", si existe:

 if object_id('pa_autor_sumaypromedio') is not null
  drop proc pa_autor_sumaypromedio;

Creamos un procedimiento almacenado que muestre los títulos, editorial y precio de los libros de un determinado autor (enviado como parámetro de entrada) y nos retorne la suma y el promedio de los precios de todos los libros del autor enviado:

 create procedure pa_autor_sumaypromedio
  @autor varchar(30)='%',
  @suma decimal(6,2) output,
  @promedio decimal(6,2) output
  as 
   select titulo,editorial,precio
   from libros
   where autor like @autor
  select @suma=sum(precio)
   from libros
   where autor like @autor
  select @promedio=avg(precio)
   from libros
   where autor like @autor;

Ejecutamos el procedimiento enviando distintos valores:

 declare @s decimal(6,2), @p decimal(6,2)
 execute pa_autor_sumaypromedio 'Richard Bach', @s output, @p output
 select @s as total, @p as promedio

 execute pa_autor_sumaypromedio 'Borges', @s output, @p output
 select @s as total, @p as promedio

 execute pa_autor_sumaypromedio 'Mario Molina', @s output, @p output
 select @s as total, @p as promedio

Ejecutamos el procedimiento sin pasar el parámetro para autor. Recuerde que en estos casos debemos colocar los nombres de las variables.

 declare @s decimal(6,2), @p decimal(6,2)
 execute pa_autor_sumaypromedio @suma=@s output,@promedio= @p output
 select @s as total, @p as promedio;



Retornar