You are on page 1of 41

Lenguaje PL/SQL

MBD330

Lenguaje PL/SQL
Procedural Language / Structured Query Language
SQL es

un lenguaje de consulta para los


sistemas de bases de datos relacionales
(estndar).

PL/SQL amplia

o potencia el lenguaje SQL


con los elementos caractersticos de los
lenguajes de programacin (oracle).
2

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

El bloque es la unidad de estructura bsica


en los programas PL/SQL (rendimiento y
proceso).
Zona de Declaraciones. Opcional.

Objetos locales (variables, constantes...).

Zona

de Instrucciones. Obligatoria.
Zona de Excepciones. Opcional.

Manejo de excepciones en el programa


5

Lenguaje PL/SQL
Estructura del Lenguaje

Sintaxis de un BLOQUE PL/SQL.


[ DECLARE | IS / AS ]
<declaraciones>
BEGIN
<instrucciones>
[ EXCEPTION ]
<tratamiento de excepciones>
END;
/
6

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

Declaracin de Registros (estructurado)


Ejemplo:
DECLARE
TYPE t_RegEstudiante IS RECORD (
Nombre
VARCHAR2(20),
ApellidoPat
VARCHAR2(20),
Edad
NUMBER(3)
);

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)

IF expresin_lgica THEN intrucciones_PL/SQL;


[ELSIF expresin_lgica THEN intrucciones_PL/SQL;]

[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)

LOOP intrucciones_PL/SQL [EXIT WHEN exp_lgica] END LOOP;


WHILE exp_lgica LOOP intrucciones_PL/SQL END LOOP;
FOR ctrl_numerico IN [REVERSE] v_ini .. V_fin LOOP
intrucciones_PL/SQL END LOOP;
FOR ctrl_cursor LOOP intrucciones_PL/SQL END LOOP;
18

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

COMMIT: refleja en forma definitiva los cambios


realizados.
ROLLBACK: aborto explcito de la transaccin
(todo vuelve a quedar como al principio).

Se considera una mala practica no usar commit o rollback explcitos.


26

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.

Declara el sistema (DML, PL/SQL).

Explcitos.

Declara el programador.
30

Lenguaje PL/SQL
Estructura del Lenguaje

Ciclo del Cursor

DECLARE

Crea un
rea de
memoria

OPEN

Identifica
registros a
procesar

Si

FETCH

Carga y
revisa los
registros

DATA?

No

CLOSE

Controla si Libera los


hay datos
registros y
en el cursor
la memoria
solicitada
31

Lenguaje PL/SQL
Estructura del Lenguaje

Otros programas (procedimientos


almacenados, funciones y paquetes).
Zona de Encabezado. Obligatoria.

Identificadores y Parmetros.

Zona

de Declaraciones. Opcional.

Objetos locales (variables, constantes...).

Zona

de Instrucciones. Obligatoria.
Zona de Excepciones. Opcional.

Manejo de excepciones en el programa

32

Lenguaje PL/SQL
Estructura del Lenguaje

Sintaxis de un Procedimiento Almacenado.


CREATE [ OR REPLACE ] PROCEDURE nombre
[ ( parmetro1 [modo] tipo_dato ) [, ] ]
IS | AS
<declaraciones>
BEGIN
<instrucciones>
[ EXCEPTION ]
<tratamiento de excepciones>
END; //todo lo que esta en [] es opcional
33

Lenguaje PL/SQL
Estructura del Lenguaje

Sintaxis de una Funcin.


CREATE [ OR REPLACE ] FUNCTION nombre
[ ( parmetro1 [modo] tipo_dato ) [, ] ]
RETURN tipo_de_datos // en la funcion siempre retorna algo
IS | AS
<declaraciones>
BEGIN
<instrucciones>
[ EXCEPTION ]
<tratamiento de excepciones>
END;
34

Ejecutar bloque:

Procedimiento: independiente.

Funcion: asignar variable o invocada (proc. O func.)


// en el lado de funcion se trabaja todo lo que debe tener un retorno
numerico o con letras.
//en el procedimiento se trabaja con dml, osea, insert, delete, update..

Ojo los select van en los 2!!

Entre procedimiento y funcion

Begin:
Fecha_actual;
End;

Declare
Y float;
begin
Y:=calcula_iva;
Put_line(y);
End;

Lenguaje PL/SQL
TRIGGERS

Es un conjunto de instrucciones PL/SQL que


se ejecutan en el momento que una
operacin INSERT, UPDATE o DELETE de
SQL es aplicada a una tabla.
Permite implementar reglas de negocio.

37

Lenguaje PL/SQL
TRIGGERS (casos tpicos)
Cambiar

el valor de una columna basado en


el valor de otras columnas de la misma u otra
tabla.
Validacin de valores de las columnas
(posiblemente comparando con valores de
otras tablas)
Documentar los cambios que se realizan
escribiendo sobre otra tabla (logfile).
38

Lenguaje PL/SQL
TRIGGERS (sintaxis)

CREATE [OR REPLACE] TRIGGER trigger-name


{BEFORE | AFTER} triggering-event
ON table-name
[FOR EACH ROW]
[WHEN (condition)]
PL/SQL-block
39

Lenguaje PL/SQL
TRIGGERS (componentes)

trigger-name nombre del trigger a ser creado


triggering-event: puede ser INSERT, UPDATE, or DELETE
table-name: nombre de la tabla con la cual el trigger est
asociado
for each row: causa el disparo del trigger por cada fila
(opcional)
condition: cuando es TRUE, habilita el trigger para ser
disparado (opcional).
PL/SQL-block: es el bloque de cdigo que se ejecuta cuando
se dispara el trigger.
40

Lenguaje PL/SQL
TRIGGERS (sintaxis)
Activar o desactivar triggers.
ALTER TRIGGER nombre [DISABLE|ENABLE]
Eliminar triggers
DROP TRIGGER nombre

41

You might also like