Sie sind auf Seite 1von 4

12/08/17

Procedimientos
Almacenados

Procedimientos
Almacenados

Stored Procedures
SP’s

Store Procedures

Grupo de una o más instrucciones SQL


que se almacenan como un objeto en la
Meta Data de la Base de Datos

1
12/08/17

Store Procedures

BD
EXEC test

EXEC test

Instrucción 1
SP test SP
Instrucción 2
EXEC test 3 xxxx
Instrucción
Instrucción 4
Reducción
Instrucción 5
SP
de Tráfico
yyyy

EXEC test EXEC test


SP zzzz

Ventajas

Reutilización de Código
Mantenimiento
Liberación
Consistencia
Encapsulamiento
Eficiencia

Store Procedures
EXEC test
@Param1 = 3,
SP test @Param2 = ‘fct’
@Param1 int, @Param3 = ‘20150512’
@Param2 char(3)
@Param3 date

Instrucción 1
Instrucción 2
EXEC test
Instrucción 3
@Param1 = 3, Instrucción 4
@Param2 = ‘fct’ Instrucción 5
@Param3 = ‘20150512’

2
12/08/17

Store Procedures

Crear Objeto CREATE PROCEDURE Pais_Estados Nombre del Objeto


Parámetro @Cod_Pais CHAR(2) Tipo de Datos
AS
Inicio
Tipo de Objeto BEGIN

Configurar SET NOCOUNT ON; Valor


SELECT *
Bloque de FROM Estados
Ejecución WHERE Cod_Pais = @Cod_Pais; Opción

END;

Store Procedures
CREATE PROCEDURE Transferencia_Bancaria
@Cajero INT, @Comprobante CHAR(16), Parámetro con un
Parámetros @Cta_Debito CHAR(20), @Cta_Credito CHAR(20),
@Monto DECIMAL(18,2), @Notas VARCHAR(255) = NULL valor por Defecto
AS

Estado Válido
BEGIN
SET NOCOUNT, XACT_ABORT ON; Configuración Opciones
BEGIN TRY
Anterior de la
Transacción BEGIN TRANSACTION
IF EXISTS (SELECT * FROM Cuentas WHERE Cuenta = @Cta_Debito AND Saldo>=@Monto)

Base de Datos BEGIN


UPDATE Cuentas SET Saldo = Saldo - @Monto

Bloque de WHERE Cuenta = @Cta_Debito;


Transferencia
Controlde
de
UPDATE Cuentas SET Saldo = Saldo + @Monto
Bloque WHERE Cuenta = @Cta_Credito;

Errores
Ejecución
INSERT INTO Log_Banco
(Fecha, Cajero, Operacion, Comprobante, Cta_Debito, Cta_Credito, Monto, Notas)

Nuevo estado VALUES


(GetDate(), @Cajero, ‘T’, @Comprobante, @Cta_Debito, @Cta_Credito, @Monto, @Notas);
END;
Válido de la COMMIT;
END TRY

BaseManejo de
de Datos BEGIN CATCH
ROLLBACK;

Errores THROW ‘Error. Transacción abortada;’ ;


END CATCH
END;

Store Procedures
CREATE PROCEDURE Transferencia_Bancaria EXEC Transferencia_Bancaria
@Cajero INT, @Comprobante CHAR(16), @Cajero = 32588,
@Cta_Debito CHAR(20), @Cta_Credito CHAR(20), @Comprobante = ‘C-20170201001025’,
@Monto DECIMAL(18,2), @Notas VARCHAR(255) = NULL
AS
@Cta_Debito = ‘0000000100258456111P’,
BEGIN @Cta_Credito = ‘0000000300023642835C’,
SET NOCOUNT, XACT_ABORT ON; @Monto = 1535.50,
BEGIN TRY @Notas = ‘Aprobado por el Gerente’
BEGIN TRANSACTION
IF EXISTS (SELECT * FROM Cuentas WHERE Cuenta = @Cta_Debito AND Saldo>=@Monto)
BEGIN
UPDATE Cuentas SET Saldo = Saldo - @Monto
WHERE Cuenta = @Cta_Debito; EXEC Transferencia_Bancaria
@Monto = 1535.50
UPDATE Cuentas SET Saldo = Saldo + @Monto @Comprobante = ‘C-20170201001025’,
WHERE Cuenta = @Cta_Credito; @Cta_Credito = ‘0000000300023642835C’,
@Cta_Debito = ‘0000000100258456111P’,
INSERT INTO Log_Banco
(Fecha, Cajero, Operacion, Comprobante, Cta_Debito, Cta_Credito, Monto, Notas) @Cajero = 32588
VALUES
(GetDate(), @Cajero, ‘T’, @Comprobante, @Cta_Debito, @Cta_Credito, @Monto, @Notas);
END;
COMMIT; EXEC Transferencia_Bancaria 32588,
END TRY
BEGIN CATCH
‘C-20170201001025’,
ROLLBACK; ‘0000000100258456111P’,
THROW ‘Error. Transacción abortada;’ ; ‘0000000300023642835C’, 1535.50
END CATCH
END;

3
12/08/17

Store Procedures
CREATE PROCEDURE Transferencia_Bancaria
@Cajero INT, @Comprobante CHAR(16),
@Cta_Debito CHAR(20), @Cta_Credito CHAR(20),
@Monto DECIMAL(18,2), @Notas VARCHAR(255) = NULL
AS
BEGIN
SET NOCOUNT, XACT_ABORT ON;
DECLARE @ReturnValue INT=0;
BEGIN TRY
BEGIN TRANSACTION
IF EXISTS (SELECT * FROM Cuentas WHERE Cuenta = @Cta_Debito AND Saldo>=@Monto)
DECLARE @Resultado INT;
BEGIN
UPDATE Cuentas SET Saldo = Saldo - @Monto EXEC @Resultado = Transferencia_Bancaria
WHERE Cuenta = @Cta_Debito; @Cajero = 32588,
UPDATE Cuentas SET Saldo = Saldo + @Monto @Comprobante = ‘C-20170201001025’,
WHERE Cuenta = @Cta_Credito;
INSERT INTO Log_Banco
@Cta_Debito = ‘0000000100258456111P’,
(Fecha, Cajero, Operacion, Comprobante, Cta_Debito, Cta_Credito, Monto, Notas) @Cta_Credito = ‘0000000300023642835C’,
VALUES @Monto = 1535.50,
(GetDate(), @Cajero, ‘T’, @Comprobante, @Cta_Debito, @Cta_Credito, @Monto, @Notas); @Notas = ‘Aprobado por el Gerente’
END;
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK;
SET @ReturnValue = -9;
END CATCH
RETURN (@ReturnValue);
END;

Store Procedures
CREATE PROCEDURE Transferencia_Bancaria
@Cajero INT, @Comprobante CHAR(16),
@Cta_Debito CHAR(20), @Cta_Credito CHAR(20),
1era Ejecución
@Monto DECIMAL(18,2), @Notas VARCHAR(255) = NULL
AS
BEGIN
SET NOCOUNT, XACT_ABORT ON;
DECLARE @ReturnValue INT=0;
BEGIN TRY
BEGIN TRANSACTION
Compilación
IF EXISTS (SELECT * FROM Cuentas WHERE Cuenta = @Cta_Debito AND Saldo>=@Monto)
BEGIN
UPDATE Cuentas SET Saldo = Saldo - @Monto
WHERE Cuenta = @Cta_Debito;
UPDATE Cuentas SET Saldo = Saldo + @Monto
WHERE Cuenta = @Cta_Credito;
INSERT INTO Log_Banco
(Fecha, Cajero, Operacion, Comprobante, Cta_Debito, Cta_Credito, Monto, Notas)
Plan de Ejecución
VALUES
(GetDate(), @Cajero, ‘T’, @Comprobante, @Cta_Debito, @Cta_Credito, @Monto, @Notas);
END;
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK;
SET @ReturnValue = -9;
END CATCH Ejecuciones siguientes
RETURN (@ReturnValue);
END;

Store Procedures

BD
EXEC test

EXEC xxxx

SP
EXEC test xxxx
SP EXEC yyyy
test
SP
yyyy

EXEC test EXEC zzzz


SP zzzz

Das könnte Ihnen auch gefallen