124 - Procedimientos almacenados (return)


La instrucción "return" sale de una consulta o procedimiento y todas las instrucciones posteriores no son ejecutadas.

Creamos un procedimiento que muestre todos los libros de un autor determinado que se ingresa como parámetro. Si no se ingresa un valor, o se ingresa "null", se muestra un mensaje y se sale del procedimiento:

 create procedure pa_libros_autor
  @autor varchar(30)=null
 as 
 if @autor is null
 begin 
  select 'Debe indicar un autor'
  return
 end;
 select titulo from  libros where autor = @autor;

Si al ejecutar el procedimiento enviamos el valor "null" o no pasamos valor, con lo cual toma el valor por defecto "null", se muestra un mensaje y se sale; en caso contrario, ejecuta la consulta luego del "else".

"return" puede retornar un valor entero.

Un procedimiento puede retornar un valor de estado para indicar si se ha ejecutado correctamente o no.

Creamos un procedimiento almacenado que ingresa registros en la tabla "libros". Los parámetros correspondientes al título y autor DEBEN ingresarse con un valor distinto de "null", los demás son opcionales. El procedimiento retorna "1" si la inserción se realiza, es decir, si se ingresan valores para título y autor y "0", en caso que título o autor sean nulos:

 create procedure pa_libros_ingreso
  @titulo varchar(40)=null,
  @autor varchar(30)=null,
  @editorial varchar(20)=null,
  @precio decimal(5,2)=null
 as 
 if (@titulo is null) or (@autor is null)
  return 0
 else 
 begin
  insert into libros values (@titulo,@autor,@editorial,@precio)
  return 1
 end;

Para ver el resultado, debemos declarar una variable en la cual se almacene el valor devuelto por el procedimiento; luego, ejecutar el procedimiento asignándole el valor devuelto a la variable, finalmente mostramos el contenido de la variable:

 declare @retorno int
 exec @retorno=pa_libros_ingreso 'Alicia en el pais...','Lewis Carroll'
 select 'Ingreso realizado=1' = @retorno
 exec @retorno=pa_libros_ingreso
 select 'Ingreso realizado=1' = @retorno;

También podríamos emplear un "if" para controlar el valor de la variable de retorno:

 declare @retorno int;
 exec @retorno=pa_libros_ingreso 'El gato con botas','Anónimo'
 if @retorno=1 print 'Registro ingresado'
 else select 'Registro no ingresado porque faltan datos';


Retornar