Professional Documents
Culture Documents
MBD330
Lenguaje PL/SQL
Procedural Language / Structured Query Language
SQL es
PL/SQL amplia
Lenguaje PL/SQL
Lenguaje de Programacin
Estructura
de Programa.
Estructuras de Datos.
Estructuras de Asignacin.
Estructuras de Decisin.
Estructuras de Iteracin.
Lenguaje PL/SQL
Contenidos principales
Estructura
del Lenguaje
Cursores
Funciones
Procedimientos
Almacenados
Triggers
Lenguaje PL/SQL
Estructura del Lenguaje
Zona
de Instrucciones. Obligatoria.
Zona de Excepciones. Opcional.
Lenguaje PL/SQL
Estructura del Lenguaje
Lenguaje PL/SQL
Zona de Declaraciones
Declaracin de Variables
nombre_variable [CONSTANT] tipo [NOT NULL] [:= valor_inicial];
Ejemplos:
DECLARE
v_location VARCHAR2(15) := Granada;
c_comm CONSTANT NUMBER(3) := 160;
v_nombre tabla_empleados.nombre%TYPE;
7
Lenguaje PL/SQL
Zona de Declaraciones
Tipo de Variables
tipo_escalar: NUMBER | DATE | CHAR | VARCHAR | BOOLEAN
identificador%TYPE: Campo de una Tabla o Escalar
identificador%ROWTYPE: Registro de una Tabla o Fila
Lenguaje PL/SQL
Zona de Declaraciones
v_Estudiante t_Reg_Estudiante;
9
Lenguaje PL/SQL
Zona de Declaraciones
Declaracin de Cursores
CURSOR nombre_cursor [parmetros] IS consulta_SQL;
Ejemplo:
DECLARE
CURSOR emp_cursor IS
SELECT cod_emp, nom_emp
FROM empleados;
10
Lenguaje PL/SQL
Zona de Declaraciones
Declaracin de Excepciones
nombre_excepcin EXCEPTION;
Ejemplo:
DECLARE
demasiados_empleados EXCEPTION;
11
Lenguaje PL/SQL
Zona de Instrucciones
Tipos de Instrucciones
Instrucciones de ASIGNACIN
Instrucciones de DECISIN (control de flujo)
Instrucciones de ITERACIN (ciclos o bucles)
12
Lenguaje PL/SQL
Zona de Instrucciones
Instrucciones de Asignacin
variable_objetivo := expresin_PL/SQL;
SELECT lista_select
INTO lista_variables
FROM ...
WHERE... ;
13
Lenguaje PL/SQL
Zona de Instrucciones
Expresiones PL/SQL
Comilla simple para textos y formato decimal para numricos
Operadores nmeros: +, -, *, /, **(exponente), MOD (resto)
Operadores para textos: || (concatenacin)
Operadores lgicos: AND, OR, NOT
Operadores de cursores:
%ROWCOUNT
%NOTFOUND
%FOUND
%ISOPEN
14
Lenguaje PL/SQL
Zona de Instrucciones
Expresiones PL/SQL
Comparadores clsicos: <, <=, =, !=, >=, >
Comparadores SQL:
[NOT] LIKE
IS [NOT] NULL
[NOT] BETWEEN lim1 AND lim2
[NOT] IN
Funciones predefinidas:
Caracteres, Numricas, Fechas, Conversin, Control de Errores
15
Lenguaje PL/SQL
Zona de Instrucciones
Instrucciones de Decisin
(control de flujos)
[ELSE intrucciones_PL/SQL;]
END IF;
16
Lenguaje PL/SQL
Zona de Instrucciones
Instrucciones de Decisin
(IF-ELSE)
DECLARE
v_Inicio NUMBER;
BEGIN
v_Inicio := funcion_prueba;
IF v_Inicio > 100 THEN
RETURN (2 * v_Inicio);
ELSIF v_Inicio >= 50 THEN
RETURN (.5 * v_Inicio);
ELSE
RETURN (.1 * v_Inicio);
END IF;
END;
17
Lenguaje PL/SQL
Zona de Instrucciones
Instrucciones de Iteracin
(ciclos o bucles)
Lenguaje PL/SQL
Zona de Instrucciones
Instrucciones de Iteracin
(LOOP)
DECLARE
v_Contador BINARY_INTEGER := 1;
BEGIN
LOOP
INSERT INTO tabla (cod_fila) VALUES (v_Contador);
v_Contador := v_Contador + 1;
EXIT WHEN v_Contador = 10;
END LOOP;
END;
19
Lenguaje PL/SQL
Zona de Instrucciones
Instrucciones de Iteracin
(WHILE)
DECLARE
v_Contador BINARY_INTEGER := 1;
BEGIN
WHILE v_Contador <= 10 LOOP
INSERT INTO tabla (cod_fila) VALUES (v_Contador);
v_Contador := v_Contador + 1;
END LOOP;
END;
20
Lenguaje PL/SQL
Zona de Instrucciones
Instrucciones de Iteracin
(FOR numrico)
BEGIN
FOR v_Contador IN 1..10 LOOP
INSERT INTO tabla (cod_fila) VALUES (v_Contador);
END LOOP;
END;
21
Lenguaje PL/SQL
Zona de Excepciones
Generalidades
Qu es una excepcin?
Se trata de una interrupcin que se produce cuando
se identifica un error en tiempo de ejecucin.
Cmo se activa?
La puede activar ORACLE, al detectar el error.
Puede ser programada, en base a lo que se defina
como error.
22
Lenguaje PL/SQL
Zona de Excepciones (sintaxis)
EXCEPTION
WHEN excepcion1 [OR excepcion2 . . .] THEN
instruccion_1;
instruccion_N;
[WHEN excepcion3 [OR excepcion4 . . .] THEN
instruccion_1;
instruccion_N;]
[WHEN OTHERS THEN
instruccion_1;
instruccion_N;]
23
Lenguaje PL/SQL
Zona de Excepciones (ejemplo)
EXCEPTION
WHEN NO_DATA_FOUND THEN
ROLLBACK;
TEXT_IO.PUT_LINE(TO_CHAR(v_prod_id)) || Es invalido.);
WHEN TOO_MANY_ROWS THEN
ROLLBACK;
TEXT_IO.PUT_LINE (Datos Corruptos en S_PRODUCTO.);
WHEN OTHERS THEN
ROLLBACK;
TEXT_IO.PUT_LINE (Otro error ocurrido.);
24
Lenguaje PL/SQL
Zona de Excepciones (propias)
DECLARE
e_cant_restante EXCEPTION;
...
BEGIN
...
RAISE e_cant_restante;
...
EXCEPTION
WHEN e_cant_restante THEN
TEXT_IO.PUT_LINE (Hay suficiente inventario.');
...
END;
25
Lenguaje PL/SQL
Estructura del Lenguaje
Transacciones en SQL
Lenguaje PL/SQL
Estructura del Lenguaje
BLOQUES ANIDADOS
DECLARE
x BINARY_INTEGER;
BEGIN
...
DECLARE
y NUMBER;
BEGIN
Alcance
...
END;
...
END;
Alcance X
27
Lenguaje PL/SQL
Estructura del Lenguaje
CONVENCIONES DE CODIGO
INDENTACION DE NIVELES DE CODIGO
Comandos SQL
Palabras claves PL/SQL
Tipos de Datos
identificadores y Parmetros
Tablas y Columnas BD
SELECT, INSERT
DECLARE, BEGIN, IF
VARCHAR, BOOLEAN
v_sal, empl_cursor, g_sal
s_empl, fecha_orden, id
28
Lenguaje PL/SQL
Estructura del Lenguaje
CONVENCIONES DE CODIGO
OJO CON PALABRAS RESERVADAS
VARIABLES
CONSTANTES
CURSORES
EXCEPCIONES
REGISTRO
v_contador
c_mensualidad
empleado_cursor
e_salto_pagina
cliente_registro
29
Lenguaje PL/SQL
Estructura del Lenguaje
CURSORES
Es una consulta SELECT de SQL, que
devuelve un resultado y que permite acceder
a cada fila de dicha consulta.
Implcitos.
Explcitos.
Declara el programador.
30
Lenguaje PL/SQL
Estructura del Lenguaje
DECLARE
Crea un
rea de
memoria
OPEN
Identifica
registros a
procesar
Si
FETCH
Carga y
revisa los
registros
DATA?
No
CLOSE
Lenguaje PL/SQL
Estructura del Lenguaje
Identificadores y Parmetros.
Zona
de Declaraciones. Opcional.
Zona
de Instrucciones. Obligatoria.
Zona de Excepciones. Opcional.
32
Lenguaje PL/SQL
Estructura del Lenguaje
Lenguaje PL/SQL
Estructura del Lenguaje
Ejecutar bloque:
Procedimiento: independiente.
Begin:
Fecha_actual;
End;
Declare
Y float;
begin
Y:=calcula_iva;
Put_line(y);
End;
Lenguaje PL/SQL
TRIGGERS
37
Lenguaje PL/SQL
TRIGGERS (casos tpicos)
Cambiar
Lenguaje PL/SQL
TRIGGERS (sintaxis)
Lenguaje PL/SQL
TRIGGERS (componentes)
Lenguaje PL/SQL
TRIGGERS (sintaxis)
Activar o desactivar triggers.
ALTER TRIGGER nombre [DISABLE|ENABLE]
Eliminar triggers
DROP TRIGGER nombre
41