INTRODUCCION A PL - SQL
INTRODUCCION A PL - SQL
DECLARE
Segundos_por_dia CONSTANT NUMBER := 60*60*24;
Begin
----
End;
DECLARE
Total number(10) := 0;
Begin
----
End;
Notas:
- Las reglas para los identificadores son las mismas que para los objetos de SQL.
- NOT NULL puede ser usado para validar una variable de manera tal que no pueda
contener valores nulos. Las Variables declaradas con NOT NULL deben ser
inicializadas.
- Solamente un identificador por línea es permitido.
- No permite manejo de arreglos.
- Puede declararse una variable como una columna o como otra variable ya
previamente declarada. Con %TYPE.
- Puede declararse un record como una tabla o como otra variable ya previamente
declarado. Con %ROWTYPE.
Ej.
DECLARE
Libros_impresos number(6);
Libros_vendidos libros_impresos%TYPE;
Escritor EMPLEADO.NOMEMP%TYPE;
Dept_record deptno%ROWTYPE;
VARIABLES GLOBALES
:global.[nombre_variable] := [valor];
IF .... THEN
...........
...........
ELSE
...........
...........
END IF;
Ej:
END IF;
ANIDADOS
IF .... THEN
...........
...........
ELSE IF …THEN
...........
...........
END IF;
END IF;
Ej:
-- Condiciona si el tipo de periodo no es “R” Regular--
IF not (:acsecc_grup.tipo_periodo in ('R')) then
message('V121 - TIPO DE PERÍODO NO VÁLIDO' ); -- mensaje –
message('V121 - TIPO DE PERÍODO NO VÁLIDO' ); -- mensaje –
raise form_trigger_failure; -- LEVANTA EL TRIGGER (EVENTO) --
ELSE IF not (:acsecc_grup.num_periodo) is null THEN – condiciona si el numero de periodo no es nulo-
NEXT_ITEM; -- Se mueve al proximo item –
END IF;
END IF;
Bloques de PL/SQL que ejecutan instrucciones repetitivas. Son comandos que permiten
la repetición de una secuencia de sentencias, un número de veces determinada.
Sintaxis:
Loop
<secuencia de sentencias>
exit [when <condicion>];
end loop;
Ej:
Loop -- inicia ciclo --
if not (:acestudiante.ano_mat is null ) then -- si el año matricula no es nulo --
busca_estudiante; -- llama procedimiento que busca si existe el estudiante --
else -- de lo contrario --
exit; -- rompe el ciclo --
end if;
FOR… END LOOP: Repite una secuencia de sentencias un número fijo de veces. Es un
condicional numérico.
Sintaxis:
Notas: El índice del ciclo toma cada uno de los valores dentro del rango en orden
ascendente o descendente (REVERSE). El índice es implícitamente de tipo numérico.
Solamente es definido dentro del ciclo. El valor del índice puede ser referenciado en una
expresión pero un nuevo valor no puede ser asignado al índice dentro del ciclo.
END LOOP;
End;
WHILE :
Repite una secuencia de sentencias hasta que una condición específica se cumpla (ciclo
condicional).
Sintaxis:
Ej:
DECLARE
x number(3) :=0; -- Declara variable para incrementar --
BEGIN
WHILE x < 500 LOOP – condiciona valor de variable e inicia ciclo –
x := x+1; -- Incrementa variable --
Insert into acestudiante (ano_mat, matricula)
values (:acestudiante.ano_mat, :acestudiante.matricula + x);
END LOOP;
End;
begin
end;
END;
BEGIN
/** Inserta datos en la tabla de acinscrip (inscripción) desde los campos del bloque
indicado **/
insert into acinscrip
values(:acinscrip.ano_mat,:acinscrip.matricula,:acinscrip.area,
:acinscrip.clave, :acinscrip.tipo_periodo,:acinscrip.num_periodo,
:acinscrip.ano_programa);
END;
Campo a actualizar
en la tabla