Beruflich Dokumente
Kultur Dokumente
SQL PROCEDURAL
Triggers y Stored Procedures
Ventajas:
Aísla partes comunes existentes en las aplicaciones,
delegándolas en el DBMS.
Desventajas:
Cada proveedor de BD tiene su propio lenguaje procedural.
El SQL-1999 incorporó estas características,
Poco de lo definido anteriormente se ajustaba a un estándar.
SQL Procedural
Trigger
Trigger:: Es un procedimiento que es invocado
automáticamente por el DBMS en respuesta a un
evento especifico de la BD.
Stored Procedure
Procedure:: Es un procedimiento que es
invocado explícitamente por el usuario.
Extensiones Procedimentales:
Sentencias compuestas (agruparlas en bloques begin end)
Declaración de variables y constantes.
Sentencias de Flujo de control:
If-then-else (elsif)
While
For (itera sobre los elementos de una tabla resultado)
Loop y repeat
Extensión en SQL-
SQL-1999
En SQL-
SQL-1999 un trigger puede ser creado, modificado o
eliminado con las siguientes sentencias:
CREATE TRIGGER
ALTER TRIGGER
DROP TRIGGER
Triggers – componentes
una vez para todas las tuplas que cambian en una operación de la
base de datos.
Triggers – for each row – for each statement
Un trigger for each row, se ejecuta 3 veces, una por cada tupla.
En SQL-
SQL-99 la sintaxis de un trigger es la siguiente:
BEGIN
cuerpo del trigger acción
END;
Triggers (Evento-
(Evento-Condición
Condición--Acción)
Ejemplo en Oracle:
Declaración de Variables.
VarName Type;
Ejemplo:
Para ejecutarlo:
exec ADJUST_SALARY_RANGE(1.1);
Cursores en Oracle
Para acceder a las tuplas resultantes de consulta:
Create procedure …
AS
var1 empleado.nombre%type;
var2 empleado.sueldo%type;
Juan 900
cursor c1 is Pedro 920
select nombre, sueldo from empleado order by sueldo;
begin Federico 1200
open c1;
Viviana 1400
fetch c1 into var1,var2;
var2 = var2 + 100; Fernando 1800
insert into registro ( sysdate, var1, var2 ); Mariano 1900
fetch c1 into var1,var2;
fetch c1 into var1,var2; …. ….
fetch c1 into var1,var2;
var2 = var2 * 1.2;
insert into registro ( sysdate, var1, var2 );
close c1;
end;
Cursores en Oracle
Cursores en conjunto con LOOP:
Create procedure ……..
AS
var1 empleado.nombre%type;
var2 empleado.sueldo%type;
cursor c1 is
select nombre, sueldo from empleado;
begin
open c1;
if c1%isopen then
loop
fetch c1 into var1,var2;
exit when c1%notfound;
var2 = var2 * 1.15;
insert into registro ( sysdate, var1, var2 );
end loop;
end if;
close c1;
end;
Cursores en Oracle
Create procedure ……
AS
var1 empleado%rowtype;
begin
for var1 in (select * from empleado)
loop
insert into registro (sysdate, var1.sueldo * 1.5 );
end loop;
end;