Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SQL PROCEDURAL
Triggers y Stored Procedures
UNCPBA - 2007
SQL Procedural
Ventajas:
Asla partes comunes existentes en las aplicaciones,
delegndolas en el DBMS.
Desventajas:
Cada proveedor de BDs tiene su propio lenguaje procedural.
El SQL-1999 incorpor estas caractersticas,
Poco de lo definido anteriormente se ajustaba a un estndar.
SQL Procedural
Extensiones Procedimentales:
Sentencias compuestas (agruparlas en bloques begin end)
Declaracin 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
Triggers o disparadores
Caractersticas principales:
La accin puede ejecutarse antes del evento disparador, despus de l
o en vez de l.
La accin puede referirse a valores anteriores y nuevos que se
insertaron, eliminaron o actualizaron en el evento que desencaden la
accin.
Los eventos de actualizacin pueden especificar un atributo particular o
un conjunto de atributos.
Una condicin puede especificarse con una clusula WHEN, y la
accin se ejecutar slo si se dispara la regla y si se cumple la
condicin cuando ocurre el evento disparador.
El programador tiene la opcin de especificar que la accin se realice:
l una vez para cada tupla modificada
BEGIN
cuerpo del trigger accin
END;
Triggers (Evento-Condicin-Accin)
Ejemplo en Oracle:
Declaracin 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;