Posted by :
ghel
lunes, 21 de julio de 2014
Procedimientos Almacenados
Un procedimiento es un programa dentro de la base de datos que ejecuta una acción o conjunto de acciones específicas. Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de código.
En Transact SQL los procedimientos almacenados pueden devolver valores (numérico entero, texto, fecha, etc.) o conjuntos de resultados. Los procedimientos almacenados al estar dentro de la base de datos pueden contener un conjunto complejo de instrucciones que al utilizarlos nos reducen la complejidad de las instrucciones.
- ■ Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.
- ■ Para ejecutar el procedimiento que ya esta creado se usa la orden EXECUTE
- ■ Para declarar una variable usamos la orden DECLARE
- ■ Para asignar valores a una variable usamos la orden SET
- ■ Para mostrar mensajes podemos usar PRINT y SELECT
- ■ En estos ejercicios mostraré el uso de las estructuras de control IF y WHILE
Aunque no usamos tablas ni registros, el objetivo de esta publicación es entender la creación de los procedimientos almacenados, la declaración de variables, asignación de valores y estructuras de control.
/*Crear siempre una base de datos en la cual trabajar*/
CREATE DATABASE bdProcedimientos
go
USE bdProcedimientos
go
/*Crear un procedimiento almacenado que muestre un saludo*/
CREATE PROCEDURE spSaludo
AS
BEGIN
PRINT 'Hola Mundo'
END
go
execute spSaludo
go
/*Crear un procedimiento almacenado que muestre un saludo variante 2*/
create procedure spSaludo2
as
begin
select 'Hola Mundo' as 'Mensaje'
end
go
execute spSaludo2
go
/*Crear un procedimiento almacenado para sumar dos números (usamos dos parametros)*/
CREATE PROCEDURE spSuma
@dato1 INT,
@dato2 INT
AS
BEGIN
DECLARE @suma INT
SET @suma = (@dato1 + @dato2)
PRINT 'La suma es: ' + CAST(@suma as VARCHAR(50))
END
go
execute spSuma 70, 11
go
/*Hacer un procedimiento que permita calcular el area de un trapecio*/
CREATE PROCEDURE spAreaTrapecio
@bMay DECIMAL(12,4),@bMen DECIMAL(12,4),@altura DECIMAL(12,4)
AS
BEGIN
DECLARE @area DECIMAL(12,4)
SET @area = (@bMay +@bMen)*@altura/2
SELECT @area 'El area es:'
END
go
EXECUTE spAreaTrapecio 5, 6, 7
go
CREATE PROCEDURE spAreaTrapecio
@bMay DECIMAL(12,4),@bMen DECIMAL(12,4),@altura DECIMAL(12,4)
AS
BEGIN
DECLARE @area DECIMAL(12,4)
SET @area = (@bMay +@bMen)*@altura/2
SELECT @area 'El area es:'
END
go
EXECUTE spAreaTrapecio 5, 6, 7
go
/*Hacer un procedimiento almacenado para dividir dos números*/
CREATE PROCEDURE spDivision
@dato1 decimal(12,4), @dato2 decimal(12,4)
AS
BEGIN
declare @resp decimal(12,4)
if(@dato2=0)
print 'ERROR en la División'
else
begin
set @resp = @dato1 / @dato2
print 'La Division es: '+cast(@resp as varchar)
end
END
go
execute spDivision 8,7
go
/*Crear un procedimiento que funcione como una calculadora de operaciones básicas*/
CREATE PROCEDURE spCalculadora
@dato1 DECIMAL(12,6),
@dato2 DECIMAL(12,6),
@operador CHAR(1)
AS
BEGIN
DECLARE @respuesta DECIMAL(12,6)
IF @operador = '+'
BEGIN
SET @respuesta = (@dato1 + @dato2)
PRINT 'La suma es: ' + CAST(@respuesta as VARCHAR(20))
END
IF @operador = '-'
BEGIN
SET @respuesta = (@dato1 - @dato2)
PRINT 'La resta es: ' + CAST(@respuesta as VARCHAR(20))
END
IF @operador = '*'
BEGIN
SET @respuesta = (@dato1 * @dato2)
PRINT 'La suma es: ' + CAST(@respuesta as VARCHAR(20))
END
IF @operador = '/'
BEGIN
SET @respuesta = (@dato1 / @dato2)
PRINT 'La división es: ' + CAST(@respuesta as VARCHAR(20))
END
END
go
EXEC spCalculadora 8,6,'+'
go
/*Usando Transact SQL imprimir el nombre mensaje "Hola Mundo" 10 veces*/
CREATE PROCEDURE spHolaMundo
AS
BEGIN
DECLARE @num INT
SET @num = 1 --Incializar el contador
WHILE @num<= 10
BEGIN
PRINT 'Hola Mundo'
SET @num = @num + 1 --Actualizar el contador en mas uno
END
END
go
EXECUTE spHolaMundo;
go
/* Mostrar una lista de numeros elevados al cuadrado hasta n: 1, 4, 9, 16, 25, 36, 49, 64, 81 ... */
CREATE PROCEDURE spCuadrados
@limite AS INT
AS
BEGIN
DECLARE @num INT, @resp INT
SET @num = 1 --Incializar el contador
WHILE @num<= @limite
BEGIN
SET @resp = @num * @num
PRINT 'El ' + CAST(@num AS VARCHAR) + ' al cuadrado es '+ CAST(@resp AS VARCHAR)
SET @num = @num + 1 --Actualizar el contador en mas uno
END
END
go
EXEC spCuadrados 7;
go
/* Hacer un procedimiento almacenado para mostrar la tabla de multiplicar de cualquier numero por ejemplo si necesitamos la tabla de multiplicar del 7, la respuesta será:
1x7=7
2x7=14
...
11x7=77
12x7=84 */
CREATE PROCEDURE spTablaMutiplicar
@dato AS INT
AS
BEGIN
DECLARE @num INT, @resp INT
SET @num = 1 --Incializar el contador
WHILE @num<= 12
BEGIN
SET @resp = @num * @dato
PRINT CAST(@num AS VARCHAR) + ' x '+ CAST(@dato AS VARCHAR) + ' = '+CAST(@resp AS VARCHAR)
SET @num = @num + 1 --Actualizar el contador en mas uno
END
END
go
EXEC spTablaMutiplicar 8;
go
/*Crear un procedimiento almacenado para mostrar los terminos de la serie fibonacci menores a m*/
CREATE PROCEDURE spFibonacci
@m int
as
Begin
declare @a int
declare @b int
declare @c int
set @a = 1
set @b = 1
while @a < @m
begin
print 'El valor: ' + cast(@a as varchar)
set @c = @a+@b
set @a = @b
set @b = @c
end
End
go
EXECUTE spFibonacci 100
CREATE PROCEDURE spFibonacci
@m int
as
Begin
declare @a int
declare @b int
declare @c int
set @a = 1
set @b = 1
while @a < @m
begin
print 'El valor: ' + cast(@a as varchar)
set @c = @a+@b
set @a = @b
set @b = @c
end
End
go
EXECUTE spFibonacci 100
go