129 - Procedimientos almacenados (anidados) |
Eliminamos, si existen, los procedimientos almacenados siguientes:
if object_id('pa_multiplicar') is not null drop proc pa_multiplicar; if object_id('pa_factorial') is not null drop proc pa_factorial;
Creamos un procedimiento almacenado que reciba 2 números enteros y nos retorne el producto de los mismos:
create procedure pa_multiplicar @numero1 int, @numero2 int, @producto int output as select @producto=@numero1*@numero2;
Probamos el procedimiento anterior:
declare @x int exec pa_multiplicar 3,9, @x output select @x as '3*9' exec pa_multiplicar 50,8, @x output select @x as '50*8';
Creamos un procedimiento que nos retorne el factorial de un número, tal procedimiento llamará al procedimiento "pa_multiplicar":
create procedure pa_factorial @numero int as if @numero>=0 and @numero<=12 begin declare @resultado int declare @num int set @resultado=1 set @num=@numero while (@num>1) begin exec pa_multiplicar @resultado,@num, @resultado output set @num=@num-1 end select rtrim(convert(char,@numero))+'!='+convert(char,@resultado) end else select 'Debe ingresar un número entre 0 y 12';
Note que en el procedimiento controlamos que el valor sea positivo, además, como los parámetros fueron definidos de tipo "int" el valor no debe superar 12 porque el factorial excede el tipo.
Ejecutamos el procedimiento que nos retorna el factorial de un número:
exec pa_factorial 5; exec pa_factorial 10;
Veamos las dependencias del procedimiento "pa_multiplicar":
exec sp_depends pa_multiplicar;
Recordemos que "sp_depends" nos informa sobre los objetos dependientes del objeto nombrado (en este caso el procedimiento "pa_multiplicar"), mostrando el nombre y tipo de objeto (en este caso el procedimiento "pa_factorial") y, si existieren, los objetos de los cuales el objeto depende (en este caso, ninguno).
Veamos las dependencias del procedimiento "pa_factorial":
exec sp_depends pa_factorial;
Recordemos que "sp_depends" nos informa sobre los objetos de los cuales depende el objeto nombrado (en este caso el procedimiento "pa_multiplicar"), mostrando el nombre, tipo y columna (en este caso el procedimiento "pa_multiplicar") y, si existieren, los objetos dependientes de él (en este caso, ninguno).