SlideShare una empresa de Scribd logo
PL/SQL (Procedural Language/SQL )
/• BLOQUES PL/SQL
• TIPOS DE DATOSTIPOS DE DATOS
• FUNCIONES Y PROCEDIMIENTOS
• PAQUETES
1
PL/SQL (Procedural Language/SQL )
• PL/SQL es el lenguaje de programación quePL/SQL es el lenguaje de programación que 
proporciona Oracle para extender el SQL 
estándar con otro tipo de estructuras eestándar con otro tipo de estructuras e 
instrucciones
1. Variables y tipos
2. Estructuras de controlst uctu as de co t o
• Bucles y sentencias IF‐THEN‐ELSE
3 Procedimientos y funciones3. Procedimientos y funciones
4. Tipos de objetos y métodos
2
PL/SQL (Procedural Language/SQL )
• PL/SQL permite:PL/SQL permite:
– Manipular los datos de la BD
Manejar errores– Manejar errores 
• Definidos por el usuario (excepciones)
• Propios del sistema (predefinidos)• Propios del sistema (predefinidos)
• La unidad básica de cualquier programa• La unidad básica de cualquier programa 
PL/SQL es el bloque
C d bl li id d ló i d• Cada bloque realiza una unidad lógica de 
trabajo en el programa, separando así unas 
dtareas de otras
3
PL/SQL (Procedural Language/SQL )
• Estructura básica de un bloque:Estructura básica de un bloque:
DECLARE
/* Declaración de uso local: variables, cursores,
excepciones de usuario, …*/
BEGIN
/* Sección ejecutable (obligatoria): órdenes SQL y
procedimentales */
EXCEPTIONEXCEPTION
/* Zona de control de errores */
ENDEND;
4
PL/SQL ‐ Declaración de variables
• Sección de Declaración de VariablesSección de Declaración de Variables
– Contiene la declaración de:
i d d• tipos de datos, 
• las constantes 
• variables
– También se declaran cursores y excepciones
definidas por el usuario.
– Las variables externas se declaran en SQL*Plus y 
se escriben precedidas de ‘:’.
5
PL/SQL ‐ Declaración de variables
• SintaxisSintaxis
nombre variable [CONSTANT] tiponombre_variable [CONSTANT] tipo
[NOT NULL]
[ l i i i l][:= valor_inicial];
lá l i di l d fi i ió d• La cláusula CONSTANT indica la definición de una 
constante que debe ser inicializada y cuyo valor no 
d difi dpuede ser modificado
• [NOT NULL]: Obliga a tener valor
6
PL/SQL ‐ Declaración de variables
• SintaxisSintaxis
nombre_variable [CONSTANT] tipo
[NOT NULL]
[:= valor_inicial];
• Tipo: puede ser:
Tipo de datos: tipo de dato de la variable– Tipo de datos: tipo de dato de la variable
– Identificador%TYPE → Se refiere al tipo usado por una 
columna de la tablacolumna de la tabla
– Identificador%ROWTYPE → Es una fila variable con los 
mismos nombres y tipos que las columnas de una tabla omismos nombres y tipos que las columnas de una tabla o 
fila recuperada de un cursor
7
PL/SQL ‐ Declaración de variables
• Variables y constantes. EjemploVariables y constantes. Ejemplo
DECLARE
v_DNI NUMBER (8,0);
v Nombre VARCHAR (30);_ ( );
c_Factor CONSTANT NUMBER(3,2):=0.10;
v DNI2 cliente DNI%TYPE;v_DNI2  cliente.DNI%TYPE;
v_precio NUMBER:= 300; 
R li t li t %ROWTYPEcur_Rcliente cliente%ROWTYPE;
8
PL/SQL ‐ Declaración de variables
• CURSORESCURSORES
– Cursor es un área de trabajo definida para las 
consultas que devuelven más de una fila. 
– Permite la manipulación de datosp
– Se le pueden pasar parámetros
• Tipos de cursores
– Cursor simple
– Cursores con paso de parámetrosp p
– Cursores con actualización 9
PL/SQL ‐ Declaración de variables
• CURSOR simple. SintaxisCURSOR simple. Sintaxis
CURSOR nombre cursor IS
sentencia_SELECT;
• EjemploEjemplo
DECLARE
….
CURSOR c_cliente IS 
SELECT cliente DNI cliente nombreSELECT cliente.DNI, cliente.nombre
FROM cliente
WHERE cliente tipo trabajo=´jefe´;WHERE cliente.tipo_trabajo= jefe ;
10
PL/SQL ‐ Declaración de variables
• CURSORES CON PASO DE PARÁMETROS. SintaxisCURSORES CON PASO DE PARÁMETROS. Sintaxis
CURSOR nombre cursor [PARAMETROS] ISCURSOR nombre cursor [PARAMETROS] IS
sentencia_SELECT;
• Los parámetros de un cursor se pueden utilizar paraLos parámetros de un cursor se pueden utilizar para 
definir variables con valores de entrada. 
• La consulta SQL asociada se ejecuta utilizando esos• La consulta SQL asociada se ejecuta utilizando esos 
valores
PARAMETROS• PARAMETROS ‐>
(nombre_parametro tipo_parametro, …)
11
PL/SQL ‐ Declaración de variables
• CURSORES CON PASO DE PARÁMETROS. SintaxisCURSORES CON PASO DE PARÁMETROS. Sintaxis
CURSOR nombre cursor [PARAMETROS] ISCURSOR nombre cursor [PARAMETROS] IS
sentencia_SELECT;
• EJEMPLO:EJEMPLO:
CURSOR cur_cliente (v_provincia cliente.provincia%TYPE) IS
SELECT dni nombreSELECT dni, nombre
FROM clientes
WHERE clientes provincia= v provincia;WHERE clientes.provincia= v_provincia;
12
PL/SQL ‐ Declaración de variables
• CURSORES CON ACTUALIZACIÓN. SintaxisCURSORES CON ACTUALIZACIÓN. Sintaxis
CURSOR nombre cursor IS
sentencia_SELECT
FOR UPDATE [OF nombre columna][ ]
S d j d difi l fil• Se dejan preparados para modificar las filas 
devueltas y se generan bloqueos exclusivos sobre 
l fil tilas filas activas
13
PL/SQL ‐ Declaración de variables
• CURSORES CON ACTUALIZACIÓN. SintaxisCURSORES CON ACTUALIZACIÓN. Sintaxis
CURSOR nombre cursor IS
sentencia_SELECT
FOR UPDATE [OF nombre columna][ ]
• EJEMPLO: 
lCURSOR cur_cliente IS 
SELECT DNI, nombre 
FROM cliente 
WHERE tipo_trabajo=´jefe´
FOR UPDATE OF salario;
14
PL/SQL ‐ Declaración de variables
• OPERACIONES CON CURSORESOPERACIONES CON CURSORES
– OPEN: abre los cursores
FETCH l l d t– FETCH : lee los datos
– CLOSE: cierra los cursores
• Pasos:
1.‐ Declarar el cursor
2.‐ Abrir el cursor en la zona de procedimiento
3.‐ Leer el cursor. Es necesario ejecutar un bucle para leerj p
todos los cursores
4.‐ Cerrar el cursor
15
PL/SQL ‐ Declaración de variables
• ATRIBUTOS DE LOS CURSORESATRIBUTOS DE LOS CURSORES
– Se le añaden al nombre del cursor 
%NOTFOUND → Se usa para detectar el final de 
un cursor. Devuelve TRUE si la ultima lecturaun cursor. Devuelve TRUE si la ultima lectura 
falla porque no hay filas disponibles y FALSE si 
recuperarecupera
%FOUND → El contrario de %NOTFOUND
%ROWCOUNT D l l ú d fil l íd%ROWCOUNT → Devuelve el número de fila leída
%ISOPEN → Devuelve TRUE si el cursor esta 
abierto y  FALSE si no lo está
16
PL/SQL – Declaración de variables
• Ejemplo uso cursorEjemplo uso cursor
DECLARE
CURSOR cur_emp IS SELECT DNI, nombre FROM
empleado;
emp registro cur emp%ROWTYPE;emp registro cur emp%ROWTYPE;
BEGIN
OPEN cur_emp;
LOOP
FETCH cur_emp INTO emp_registro;
EXIT WHEN %NOTFOUNDEXIT WHEN cur emp%NOTFOUND;
...
END LOOP;END LOOP;
CLOSE cur_emp;
END;
17
PL/SQL ‐ Declaración de variables
• EXCEPCIONESEXCEPCIONES
– Excepciones predefinidas en PL/SQL que 
informan de los errores producidos en la 
ejecución de las sentencias SQL por parte del 
sistema de gestión de bases de datos.
– Además de éstas, el programador puede definir , p g p
excepciones de uso específico.
– Controlan los errores de ejecución de unControlan los errores de ejecución de un 
programa, previstos por el programador
El control de las excepciones de usuario es– El  control de las excepciones de usuario es 
enteramente gestionado por él.  18
PL/SQL ‐ Declaración de variables
• EXCEPCIONES. SintaxisEXCEPCIONES. Sintaxis
nombre_excepción EXCEPTION;
– Cada excepción trata un error
– No son variables y no se las puede tratar comoNo son variables y no se las puede tratar como 
tal
No pueden utilizarse como argumentos en– No pueden utilizarse como argumentos en 
funciones ni en procedimientos
S ti di t l t i RAISE– Se activan mediante la sentencia RAISE
RAISE nombre_excepción;
19
PL/SQL – Sección de excepciones
• EjemploEjemplo
DECLARE
e hay emp EXCEPTION;e_hay_emp EXCEPTION;
v_dep departamento.depnum%TYPE := 10;
BEGIN
IF (SELECT COUNT(*) FROM empleados WHERE depnum = v_dep)=0
THEN RAISE e_dep_vacio;
ELSE END IF;ELSE  …  END IF;
…
END;
20
PL/SQL – Tipos de datos estructurados
• Entre los tipos de datos estructurados queEntre los tipos de datos estructurados que 
proporciona PL/SQL están: 
– los registros (RECORD)g ( )
– los vectores (TABLE y VARRAY). 
• Se declaran en la sección DECLARE
21
PL/SQL – Tipos de datos estructurados
• REGISTROS – SintaxisREGISTROS  Sintaxis 
TYPE nombre_tipo IS RECORD
(campo tipo[, campo tipo] ...);
– Ejemplo:
TYPE tipo_empleado_reg IS RECORD
( nombre VARCHAR2(10),( ( ),
puesto VARCHAR2(8),
sueldo NUMBER(6)( )
);
22
PL/SQL – Tipos de datos estructurados
• REGISTROS – creación de variablesREGISTROS  creación de variables 
Nombre_variable tipo_reg;
– Ejemplo:
v_empleado_reg tipo_empleado_reg;
• Referenciar las variables
Nombre_variable.campo:=valor
23
PL/SQL – Tipos de datos estructurados
• VECTORES Y TABLAS – SintaxisVECTORES Y TABLAS  Sintaxis
TYPE nombre_tipo IS VARRAY (tamaño_max)
OF tipo_datos [NOT NULL];
TYPE nombre_tipo IS TABLE
OF tipo_datos [NOT NULL];
– La tabla puede crecer ilimitadamente
– El vector solo puede crecer hasta el tamañoEl vector solo puede crecer hasta el tamaño 
máximo definido 24
PL/SQL – Tipos de datos estructurados
• VECTORESVECTORES
TYPE nombre_tipo IS VARRAY (tamaño_max)
OF tipo_datos [NOT NULL];
– Para poder utilizar los vectores, deben ser 
previamente creados vacíos o con elementos. 
– Para insertar elementos adicionales se tienen quePara insertar elementos adicionales se tienen que 
extender mediante la cláusula EXTEND
– En los vectores no se pueden borrar elementos– En los vectores no se pueden borrar elementos
25
PL/SQL – Tipos de datos estructurados
• VECTORESVECTORES
– Ejemplo:
DECLAREDECLARE
TYPE t_varray IS VARRAY (50) OF empleado.nombre%TYPE;
v varray t varray;v_varray t_varray;
BEGIN
...
v_varray := t_varray(‘Ana’, ‘Lola’);‐‐ se crea con dos elementos
v_varray.EXTEND;
v varray(3) ‘Luis’v_varray(3) := ‘Luis’;
v_varray.EXTEND;
v varray(4) := ‘Juan’; _ y( ) ;
....
END;
26
PL/SQL – Tipos de datos estructurados
• TABLASTABLAS 
TYPE nombre_tipo IS TABLE
OF tipo datos [NOT NULL]OF tipo_datos [NOT NULL];
– En los tipo TABLE se pueden borrar elementos con 
la instrucción DELETE, pudiendo quedar huecos 
intermedios vacíos 
– Se pueden volver a llenar con una asignación. La 
función EXISTS nos permite saber si un elemento 
se puede referenciar o ha sido borrado
27
PL/SQL – Tipos de datos estructurados
• TABLAS – EjemploTABLAS  Ejemplo
DECLARE
TYPE t table IS TABLE OF empleado.nombre%TYPE;_ p ;
v_table t_table;
BEGIN
v_table := t_table(‘Ana’, ‘Lola’);
v_table(2) := NULL; ‐‐Dejar una posición vacía
v table1 DELETE(1); Así es como se borra una posiciónv_table1.DELETE(1);‐‐Así es como se borra una posición
v_table1.EXTEND;
v table1(3) := ‘Luis’;_ ( ) ;
IF v_table1(1).EXISTS
THEN ...;
ELSE v_table1(1) := ‘Pepe’; END IF;
END; 28
PL/SQL – Tipos de datos estructurados
• VECTORES Y TABLAS – Métodos predefinidosVECTORES Y TABLAS  Métodos predefinidos
– COUNT → Devuelve el número de filas de la tabla
DELETE (nº) → Borra las filas de una tabla– DELETE (nº) → Borra las filas de una tabla
– EXITS (nº) → Devuelve TRUE si existe en la tabla la fila 
especificadaespecificada
– FIRST → Devuelve el índice de la primera fila
– LAST → Devuelve el índice de la última fila– LAST → Devuelve el índice de la última fila
– NEXT → Devuelve el índice de la fila de la tabla que sigue a 
la fila especificadala fila especificada
– PRIOR → Devuelve el índice de la fila de la tabla que 
precede a la fila especificadap p
29
PL/SQL – Sección Ejecutable
• Sección EjecutableSección Ejecutable
–Tres clases de instrucciones
• Instrucciones de asignacióng
• Instrucciones de control de flujo
• Bucles• Bucles
–Instrucciones no permitidas son: 
DROP CREATE ALTERDROP, CREATE, ALTER, …
30
PL/SQL – Sección Ejecutable
• Instrucciones de asignaciónInstrucciones de asignación
variable := expresión;p ;
• Expresiones• Expresiones:
– Pueden incluir literales, variables y constantes 
definidas en el bloque
– También funciones aplicadas sobre literales, 
constantes y variables. 
31
PL/SQL – Sección Ejecutable
• Instrucciones de asignación‐ Asignación deInstrucciones de asignación Asignación de 
sentencias SQL
– Es posible realizar la asignación del resultado de 
una SELECT  a una lista de variables o a un cursor.
– Si se asigna a una lista de variables,  la consulta 
asociada sólo debe dar como resultado una únicaasociada sólo debe dar como resultado una única 
fila (en caso contrario se genera una excepción)
– Cuando no se conoce a priori el número de filas– Cuando no se conoce a priori el número de filas 
del resultado, resulta más conveniente utilizar 
cursorescursores.
32
PL/SQL – Sección Ejecutable
• Literales:Literales:
– Las cadenas de caracteres se delimitan por la 
comilla simplecomilla simple.
– Los números reales pueden especificarse tanto 
en formato decimal como científico
– Operadores sobre Números: +, ‐, *, /, **, MOD
– Operadores sobre cadenas: || (concatenación)Operadores sobre cadenas: || (concatenación).
– Operadores lógicos: AND, OR, NOT.
33
PL/SQL – Sección Ejecutable
• Literales:Literales:
– Operadores sobre cursores: 
%ROWCOUNT,  %NOTFOUND, 
%FOUND,  %ISOPEN.
– Comparadores clásicos:
< <= = != ^= < =<, <=, =, !=,  =, <, =
– Comparadores SQL: 
[ ] [ ][NOT] LIKE, IS [NOT] NULL,
[NOT] BETWEEN..AND..,
[NOT] IN
34
PL/SQL – Sección Ejecutable
• Funciones:Funciones:
– Funciones sobre cadenas de caracteres: 
ASCII CHR LENGTH LOWER SUBSTR UPPERASCII, CHR, LENGTH, LOWER, SUBSTR, UPPER, …
– Funciones numéricas: ABS, FLOOR, MOD,ROUND, SQRT, 
TRUNCTRUNC, …
– Funciones sobre fechas: ADD_MONTHS, LAST_DAY, 
MONTHS BETWEEN, NEXT DAY, SYSDATE, TRUNC.MONTHS_BETWEEN, NEXT_DAY,  SYSDATE, TRUNC.
– Funciones de conversión: TO_CHAR, TO_DATE, 
TO_NUMBER._
– Funciones de control de errores: SQLCODE, SQLERRM
– …
35
PL/SQL – Sentencias de Control de flujo
• Sentencias de Control de flujoSentencias de Control de flujo
– Realizan el control del comportamiento del 
bloquebloque.
– Tipos:
• Condicionales (IF)
• Bucles 
–Los bucles permiten repetir un número de 
veces un conjunto de instruccionesveces un conjunto de instrucciones 
PL/SQL.
Para romper el bucle se usa EXIT GOTO o–Para romper el bucle se usa EXIT, GOTO o 
RAISE 36
PL/SQL – Sentencias de Control de flujo
• CONDICIONALES (IF)CONDICIONALES (IF)
– Ejecuta una o varias sentencias dependiendo de 
una condiciónuna condición
IF condición THEN instrucciones;
[ELSIF condición THEN instrucciones]
[ELSE instrucciones];
……
EN DIF
37
PL/SQL – Sentencias de Control de flujo
• BUCLESBUCLES
– Bucles simples (LOOP).
– Bucles condicionales (WHILE)
– Bucles numéricos (FOR)
– Bucles sobre cursores
– Bucles sobre sentencias SELECTBucles sobre sentencias SELECT
38
PL/SQL – Sentencias de Control de flujo
• BUCLES SIMPLES (LOOP) – SintaxisBUCLES SIMPLES (LOOP)  Sintaxis
[nombre_bucle] LOOP sentencias;
END LOOPEND LOOP;
• Ejemplo
DECLARE
v_contador BINARY_INTEGER:=1;
BEGINBEGIN
LOOP
INSERT INTO tabla_temporal
S ( d j l )VALUES (v contador,’ejemplo’);
v_contador:=v_contador+1;
EXIT WHEN v_contador>50;
END LOOP;
END; 39
PL/SQL – Sentencias de Control de flujo
• BUCLES CONDICIONALES (WHILE)BUCLES CONDICIONALES (WHILE)
– La condición se evalúa antes de entrar en el 
buclebucle
[nombre_bucle] WHILE condición
LOOP
sentencias;
END LOOP;
40
PL/SQL – Sentencias de Control de flujo
• BUCLES CONDICIONALES (WHILE)BUCLES CONDICIONALES (WHILE)
– Ejemplo
DECLAREDECLARE
v_contador BINARY_INTEGER:=1;
BEGIN
WHILE v_contador<=50 LOOP
INSERT INTO tabla_temporal
VALUES (v_contador,’ejemplo’);
v_contador:=v_contador+1;
END LOOP;
END;
41
PL/SQL – Sentencias de Control de flujo
• BUCLES NUMÉRICOS (FOR)BUCLES NUMÉRICOS (FOR)
– Se ejecutan una sola vez por cada elemento de 
rango definidorango definido
[nombre_bucle] FOR indice IN [REVERSE]
e p n1 e p n2 LOOPexp n1..exp n2 LOOP
sentencias;
END LOOPEND LOOP;
– indice: variable numérica de control empieza en 
1 i 2exp_n1 y termina en exp_n2 .
– Se declara implícitamente como un 
BINARY_INTEGER
42
PL/SQL – Sentencias de Control de flujo
• BUCLES NUMÉRICOS (FOR)BUCLES NUMÉRICOS (FOR)
– Se ejecutan una sola vez por cada elemento de 
rango definidorango definido
[nombre_bucle] FOR indice IN
[REVERSE] e p n1 e p n2 LOOP[REVERSE] exp n1..exp n2 LOOP
sentencias;
END LOOPEND LOOP;
[ V S ] L h l é– [REVERSE]: La cuenta se hace al revés 
– Exp_n1, y exp_n2 pueden ser ctes o cualquier 
expresión que devuelva un número
43
PL/SQL – Sentencias de Control de flujo
• BUCLES NUMÉRICOS (FOR)BUCLES NUMÉRICOS (FOR)
– Ejemplo
BEGIN
FOR v_contador IN 1..50 LOOP
INSERT INTO tabla_temporal
VALUES (v_contador,’ejemplo’);
END LOOP;
END;
44
PL/SQL – Sentencias de Control de flujo
• BUCLES SOBRE CURSORESBUCLES SOBRE CURSORES
– En un bucle sobre cursores se declara de modo 
implícito la variable fila  asociada. 
– Asimismo, se realiza un OPEN del cursor al entrar 
en el bucle y un CLOSE al saliry
– Se produce un FETCH implícito en cada iteración 
del bucledel bucle.
45
PL/SQL – Sentencias de Control de flujo
• BUCLES SOBRE CURSORESBUCLES SOBRE CURSORES
– Ejemplo:
DECLAREDECLARE
CURSOR cur_emp IS
SELECT num_empleado, nomb_empleado FROM 
empleado;
BEGINBEGIN
FOR emp_registro IN cur_emp LOOP
IF i t d d 30 THENIF emp_registro.edad>30 THEN ...
END LOOP;
END;
46
PL/SQL – Sentencias de Control de flujo
• BUCLES SOBRE SENTENCIAS SELECTBUCLES SOBRE SENTENCIAS SELECT
– Es el mismo concepto anterior pero sin 
declaración de cursoresdeclaración de cursores
[nombre bucle][nombre_bucle]
FOR nombre_registro IN (sentencia_select)
LOOP t iLOOP sentencias
END LOOP;
– Cuando se sale con exit o error del bucle el 
cursor interno que genera ORACLE se cierracursor interno que genera ORACLE se cierra
47
PL/SQL – Sentencias de Control de flujo
• BUCLES SOBRE SENTENCIAS SELECTBUCLES SOBRE SENTENCIAS SELECT
– Ejemplo
BEGIN
FOR registro IN (SELECT DNI, nombre FROM cliente)g ( , )
LOOP
INSERT INTO tabla temporal_ p
(contador, texto)
VALUES (registro.DNI, registro.nombre);VALUES (registro.DNI, registro.nombre);
END LOOP;
END;END;
48
PL/SQL – Sentencias de Control de flujo
• GOTO y ETIQUETASGOTO y ETIQUETAS
– transfiere el control a la sentencia o bloque 
siguiente a la etiqueta indicadasiguiente a la etiqueta indicada
<<etiqueta>>
GOTO <<etiqueta>>;
– La sentencia puede ir a otro bloque o sub‐bloque 
pero nunca a la zona de excepciones.
– La sentencia siguiente a la etiqueta debe ser un
ejecutable.
– No se puede realizar saltos al interior de un IF o– No se puede realizar saltos al interior de un IF o 
de un bucle. 49
PL/SQL – Sección de excepciones
• Manejo de excepcionesManejo de excepciones
– Permite responder ante cualquier problema que– Permite responder ante cualquier problema que 
pueda ocurrir en la ejecución de cualquier 
operaciónoperación
– La ejecución de la aplicación finaliza al 
t l úpresentarse algún error grave
– Mediante el manejo de excepciones es posible 
realizar una serie de acciones y continuar la 
ejecución de la aplicación.
50
PL/SQL – Sección de excepciones
• Manejo de excepcionesManejo de excepciones
WHEN excepciones THEN instrucciones;WHEN excepciones THEN instrucciones;
– Donde excepciones: 
excep_múltiples | OTHERS
– Donde excep múltiples:Donde excep_múltiples: 
excepción | excepción OR excep_múltiples
51
PL/SQL – Sección de excepciones
• Manejo de excepcionesManejo de excepciones
– La activación de una excepción la realiza el– La activación de una excepción la realiza el 
sistema o el programa mediante utilización de la 
sentencia RAISEsentencia RAISE
– Cuando una excepción se activa, la ejecución 
ti ú l t d j d dcontinúa en la parte de manejadores de 
excepciones 
– Si no existe la excepción activada en la sección de 
excepciones, la excepción sigue activa por si 
tuviera que ser tratada en otro nivel. 
52
PL/SQL – Sección de excepciones
• En la parte de manejadores la ejecución seEn la parte de manejadores, la ejecución se 
realiza del modo siguiente:
S b j d d l ió– Se busca un manejador que corresponda con la excepción 
activada,
La cláusula OTHERS corresponde a todas las excepciones– La cláusula OTHERS corresponde a todas las excepciones
– Es conveniente poner la cláusula OTHERS la última
Una vez encontrado el manejador se desactiva la– Una vez encontrado el manejador, se desactiva la 
excepción y se ejecutan las instrucciones asociadas
– Si se deseara mantener activa la excepción o se desea– Si se deseara mantener activa la excepción, o se desea 
activar cualquier otra, es posible incluir la sentencia RAISE 
que finalizaría el bloque y activaría la excepción asociada.q q y p
53
PL/SQL – Sección de excepciones
• Excepciones predefinidas por Oracle:Excepciones predefinidas por Oracle:
– NO_DATA_FOUND, TOO_MANY_ROWS →
Ocurren cuando un select no selecciona nada o 
selecciona varias filas cuando sólo se esperaba una
– INVALID_NUMBER, VALUE_ERROR, ZERO_DIVIDE →
S d i i lid d t t i t dSe producen por operaciones invalidas de tratamiento de 
números
DUP VAL ON INDEX →– DUP_VAL_ON_INDEX →
Se produce cuando se intenta insertar una clave primaria 
duplicadaduplicada.
54
PL/SQL – Sección de excepciones
• Excepciones predefinidas por Oracle:Excepciones predefinidas por Oracle:
– CURSOR_ALREADY_OPEN →
Ocurre al intentar abrir  un cursor ya abierto
– INVALID_CURSOR →
Ocurre al intentar hacer una operación invalida sobre un cursor
– PROGRAM_ERROR, STORAGE_ERROR, 
TIMEOUT ON RESOURCE →TIMEOUT_ON_RESOURCE →
Detectan errores de almacenamiento o de ejecución.
55
PL/SQL – Sección de excepciones
• Manejo de excepciones – EjemploManejo de excepciones  Ejemplo
DECLARE
e hay emp EXCEPTION;e_hay_emp EXCEPTION;
v_dep departamento.depnum%TYPE := 10;
BEGIN
IF (SELECT COUNT(*) FROM empleados WHERE depnum = v_dep)=0
THEN RAISE e_dep_vacio;
ELSE END IF;ELSE  …  END IF;
EXCEPTION
WHEN e dep vacio THEN RAISE APPLICATION ERROR(‐20001, ‘ElWHEN e_dep_vacio THEN RAISE_APPLICATION_ERROR( 20001,  El 
dep. TO_CHAR(v_dep) no tiene empleados .’);
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(‘abortado por 
d id ’)error desconocido’);
END; 56

Más contenido relacionado

La actualidad más candente

Sql(structured query language)
Sql(structured query language)Sql(structured query language)
Sql(structured query language)
Ishucs
 
Comandos SQL
Comandos SQLComandos SQL
Comandos SQL
Erwin Fischer
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
Kamisutra
 
Introduction to sql
Introduction to sqlIntroduction to sql
Introduction to sql
VARSHAKUMARI49
 
Disparadores - base de datos
Disparadores - base de datosDisparadores - base de datos
Disparadores - base de datosAdriana Becerra
 
Indices en oracle
Indices en oracleIndices en oracle
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
Lic_Vera
 
SQL report
SQL reportSQL report
SQL report
Ahmad Zahid
 
JAVA DATABASE CONNECTIVITY (JDBC)
  JAVA DATABASE CONNECTIVITY (JDBC)  JAVA DATABASE CONNECTIVITY (JDBC)
JAVA DATABASE CONNECTIVITY (JDBC)
MILAGRINAMAGUINAPRINCIPE
 
Diapositivas De Tablas y Base Datos
Diapositivas De Tablas y Base DatosDiapositivas De Tablas y Base Datos
Diapositivas De Tablas y Base Datos
Jose Erlin Rojas Cercado
 
Consultas base de datos en SQL
Consultas base de datos en SQLConsultas base de datos en SQL
Consultas base de datos en SQL
Cristian Salazar C.
 
Oracle: Joins
Oracle: JoinsOracle: Joins
Oracle: Joins
oracle content
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dmlGerardo
 
DDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datosDDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datos
vargasaldanajohanna
 
Lenguaje de definición de datos (ddl)
Lenguaje de definición de datos (ddl)Lenguaje de definición de datos (ddl)
Lenguaje de definición de datos (ddl)
jhon dennis floresmamani
 

La actualidad más candente (20)

Sql(structured query language)
Sql(structured query language)Sql(structured query language)
Sql(structured query language)
 
Comandos SQL
Comandos SQLComandos SQL
Comandos SQL
 
TRIGGERS
TRIGGERSTRIGGERS
TRIGGERS
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
 
Sql procedimientos-almacenados
Sql procedimientos-almacenadosSql procedimientos-almacenados
Sql procedimientos-almacenados
 
Chapter8 pl sql
Chapter8 pl sqlChapter8 pl sql
Chapter8 pl sql
 
Introduction to sql
Introduction to sqlIntroduction to sql
Introduction to sql
 
Lenguaje SQL
Lenguaje SQLLenguaje SQL
Lenguaje SQL
 
Disparadores - base de datos
Disparadores - base de datosDisparadores - base de datos
Disparadores - base de datos
 
Indices en oracle
Indices en oracleIndices en oracle
Indices en oracle
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
SQL report
SQL reportSQL report
SQL report
 
JAVA DATABASE CONNECTIVITY (JDBC)
  JAVA DATABASE CONNECTIVITY (JDBC)  JAVA DATABASE CONNECTIVITY (JDBC)
JAVA DATABASE CONNECTIVITY (JDBC)
 
Sql select
Sql select Sql select
Sql select
 
Diapositivas De Tablas y Base Datos
Diapositivas De Tablas y Base DatosDiapositivas De Tablas y Base Datos
Diapositivas De Tablas y Base Datos
 
Consultas base de datos en SQL
Consultas base de datos en SQLConsultas base de datos en SQL
Consultas base de datos en SQL
 
Oracle: Joins
Oracle: JoinsOracle: Joins
Oracle: Joins
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dml
 
DDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datosDDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datos
 
Lenguaje de definición de datos (ddl)
Lenguaje de definición de datos (ddl)Lenguaje de definición de datos (ddl)
Lenguaje de definición de datos (ddl)
 

Destacado

Curso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL AvanzadoCurso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL Avanzado
CLEFormación
 
Programación Java
Programación JavaProgramación Java
Programación Java
Jano González
 
Funciones Útiles Oracle/SQL
Funciones Útiles Oracle/SQLFunciones Útiles Oracle/SQL
Funciones Útiles Oracle/SQL
cristianpark
 
Ejercicios propuestos con funciones en oracle
Ejercicios propuestos con funciones en oracleEjercicios propuestos con funciones en oracle
Ejercicios propuestos con funciones en oracle
Jhonatan Abal Mejia
 
Ejercicios
EjerciciosEjercicios
Ejercicios
marvinarevalo83
 
Tarea 3
Tarea 3Tarea 3
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
Byron Quisquinay
 
PL/SQL
PL/SQLPL/SQL
5 características del lenguaje cobol
5 características del lenguaje cobol5 características del lenguaje cobol
5 características del lenguaje cobolGili Freire
 
MANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQLMANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQL
Edgar Sandoval
 
Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)
José Toro
 
Sesion10 - Funciones y procedimientos (Oracle)
Sesion10 - Funciones y procedimientos (Oracle)Sesion10 - Funciones y procedimientos (Oracle)
Sesion10 - Funciones y procedimientos (Oracle)
José Toro
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos AlmacenadosRafa
 
Funciones oracle sql
Funciones oracle sqlFunciones oracle sql

Destacado (18)

Curso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL AvanzadoCurso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL Avanzado
 
Programación Java
Programación JavaProgramación Java
Programación Java
 
Funciones Útiles Oracle/SQL
Funciones Útiles Oracle/SQLFunciones Útiles Oracle/SQL
Funciones Útiles Oracle/SQL
 
Ejercicios propuestos con funciones en oracle
Ejercicios propuestos con funciones en oracleEjercicios propuestos con funciones en oracle
Ejercicios propuestos con funciones en oracle
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Tarea 3
Tarea 3Tarea 3
Tarea 3
 
Triggers ii
Triggers iiTriggers ii
Triggers ii
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Exercícios PL/SQL
Exercícios PL/SQLExercícios PL/SQL
Exercícios PL/SQL
 
Programacion practica prolog
Programacion practica prologProgramacion practica prolog
Programacion practica prolog
 
Presentacion PL/SQL
Presentacion PL/SQLPresentacion PL/SQL
Presentacion PL/SQL
 
PL/SQL
PL/SQLPL/SQL
PL/SQL
 
5 características del lenguaje cobol
5 características del lenguaje cobol5 características del lenguaje cobol
5 características del lenguaje cobol
 
MANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQLMANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQL
 
Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)
 
Sesion10 - Funciones y procedimientos (Oracle)
Sesion10 - Funciones y procedimientos (Oracle)Sesion10 - Funciones y procedimientos (Oracle)
Sesion10 - Funciones y procedimientos (Oracle)
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Funciones oracle sql
Funciones oracle sqlFunciones oracle sql
Funciones oracle sql
 

Similar a Plsql y paquetes

Conceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sqlConceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sqlAndrei Hortúa
 
Pl Sql
Pl SqlPl Sql
U8- BBDD - El lenguaje PLSQL operadores y estructuras de control.pdf
U8- BBDD - El lenguaje PLSQL operadores y estructuras de control.pdfU8- BBDD - El lenguaje PLSQL operadores y estructuras de control.pdf
U8- BBDD - El lenguaje PLSQL operadores y estructuras de control.pdf
ayoubbenjaddi5
 
Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2
GeovannyYungan
 
01-declaracion-de-variables
01-declaracion-de-variables01-declaracion-de-variables
01-declaracion-de-variablesUAL
 
Tsql
TsqlTsql
Cap I Plsql
Cap I PlsqlCap I Plsql
Cap I Plsql
Martin Coronel
 
Sesion06b - Introducción al PL-SQL (Oracle)
Sesion06b - Introducción al PL-SQL (Oracle)Sesion06b - Introducción al PL-SQL (Oracle)
Sesion06b - Introducción al PL-SQL (Oracle)
José Toro
 
Diapositivas transact sql
Diapositivas transact sqlDiapositivas transact sql
Diapositivas transact sql
TAPIA SILVA EVELINA
 
02 instrucciones
02   instrucciones02   instrucciones
02 instrucciones
avalver2
 
LENGUAJE TRANSACT SQL
 LENGUAJE TRANSACT SQL LENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQL
wilderroy
 
103305862 t-sql
103305862 t-sql103305862 t-sql
103305862 t-sql
santi perugachi
 
LENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQLLENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQL
ana leydi linares serrano
 
Tsql
TsqlTsql
Unid2 transact sql 1
Unid2  transact sql 1Unid2  transact sql 1
Unid2 transact sql 1ALEXSILVARSM
 

Similar a Plsql y paquetes (20)

PLSQL y paquetes
PLSQL y paquetesPLSQL y paquetes
PLSQL y paquetes
 
Apunte plsql
Apunte plsqlApunte plsql
Apunte plsql
 
Conceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sqlConceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sql
 
Pl Sql
Pl SqlPl Sql
Pl Sql
 
71946780 manual-pl-sql-espanol
71946780 manual-pl-sql-espanol71946780 manual-pl-sql-espanol
71946780 manual-pl-sql-espanol
 
U8- BBDD - El lenguaje PLSQL operadores y estructuras de control.pdf
U8- BBDD - El lenguaje PLSQL operadores y estructuras de control.pdfU8- BBDD - El lenguaje PLSQL operadores y estructuras de control.pdf
U8- BBDD - El lenguaje PLSQL operadores y estructuras de control.pdf
 
Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2
 
01-declaracion-de-variables
01-declaracion-de-variables01-declaracion-de-variables
01-declaracion-de-variables
 
1 clase de Ps /sql
    1  clase  de  Ps /sql     1  clase  de  Ps /sql
1 clase de Ps /sql
 
Tsql
TsqlTsql
Tsql
 
Cap I Plsql
Cap I PlsqlCap I Plsql
Cap I Plsql
 
Sesion06b - Introducción al PL-SQL (Oracle)
Sesion06b - Introducción al PL-SQL (Oracle)Sesion06b - Introducción al PL-SQL (Oracle)
Sesion06b - Introducción al PL-SQL (Oracle)
 
Diapositivas transact sql
Diapositivas transact sqlDiapositivas transact sql
Diapositivas transact sql
 
02 instrucciones
02   instrucciones02   instrucciones
02 instrucciones
 
LENGUAJE TRANSACT SQL
 LENGUAJE TRANSACT SQL LENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQL
 
103305862 t-sql
103305862 t-sql103305862 t-sql
103305862 t-sql
 
t-sql
t-sqlt-sql
t-sql
 
LENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQLLENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQL
 
Tsql
TsqlTsql
Tsql
 
Unid2 transact sql 1
Unid2  transact sql 1Unid2  transact sql 1
Unid2 transact sql 1
 

Más de Fabián Alexander Moya

Taller 1 bdd
Taller 1 bddTaller 1 bdd

Más de Fabián Alexander Moya (7)

Tarea 1 – investigación bpmn
Tarea 1 – investigación bpmnTarea 1 – investigación bpmn
Tarea 1 – investigación bpmn
 
Taller 1 bdd
Taller 1 bddTaller 1 bdd
Taller 1 bdd
 
Packages pl sql
Packages pl sqlPackages pl sql
Packages pl sql
 
Sql
SqlSql
Sql
 
Triggers
TriggersTriggers
Triggers
 
Funciones
FuncionesFunciones
Funciones
 
Procedimientos y excepciones
Procedimientos y excepcionesProcedimientos y excepciones
Procedimientos y excepciones
 

Último

c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptxc3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
Martín Ramírez
 
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
20minutos
 
El fundamento del gobierno de Dios. El amor
El fundamento del gobierno de Dios. El amorEl fundamento del gobierno de Dios. El amor
El fundamento del gobierno de Dios. El amor
Alejandrino Halire Ccahuana
 
Libro infantil sapo y sepo un año entero pdf
Libro infantil sapo y sepo un año entero pdfLibro infantil sapo y sepo un año entero pdf
Libro infantil sapo y sepo un año entero pdf
danitarb
 
T3-Instrumento de evaluacion_Planificación Analìtica_Actividad con IA.pdf
T3-Instrumento de evaluacion_Planificación Analìtica_Actividad con IA.pdfT3-Instrumento de evaluacion_Planificación Analìtica_Actividad con IA.pdf
T3-Instrumento de evaluacion_Planificación Analìtica_Actividad con IA.pdf
eliecerespinosa
 
Proceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de PamplonaProceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de Pamplona
Edurne Navarro Bueno
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
El Fortí
 
Friedrich Nietzsche. Presentación de 2 de Bachillerato.
Friedrich Nietzsche. Presentación de 2 de Bachillerato.Friedrich Nietzsche. Presentación de 2 de Bachillerato.
Friedrich Nietzsche. Presentación de 2 de Bachillerato.
pablomarin116
 
Junio 2024 Fotocopiables Ediba actividades
Junio 2024 Fotocopiables Ediba actividadesJunio 2024 Fotocopiables Ediba actividades
Junio 2024 Fotocopiables Ediba actividades
cintiat3400
 
Conocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del ArrabalConocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del Arrabal
Profes de Relideleón Apellidos
 
SESION ORDENAMOS NÚMEROS EN FORMA ASCENDENTE Y DESCENDENTE 20 DE MAYO.docx
SESION ORDENAMOS NÚMEROS EN FORMA ASCENDENTE Y DESCENDENTE 20 DE MAYO.docxSESION ORDENAMOS NÚMEROS EN FORMA ASCENDENTE Y DESCENDENTE 20 DE MAYO.docx
SESION ORDENAMOS NÚMEROS EN FORMA ASCENDENTE Y DESCENDENTE 20 DE MAYO.docx
QuispeJimenezDyuy
 
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIACONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
BetzabePecheSalcedo1
 
CALENDARIZACION DEL MES DE JUNIO - JULIO 24
CALENDARIZACION DEL MES DE JUNIO - JULIO 24CALENDARIZACION DEL MES DE JUNIO - JULIO 24
CALENDARIZACION DEL MES DE JUNIO - JULIO 24
auxsoporte
 
El fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docxEl fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docx
Alejandrino Halire Ccahuana
 
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCIONCAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
MasielPMP
 
Semana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptxSemana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptx
LorenaCovarrubias12
 
Presentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos DigitalesPresentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos Digitales
nievesjiesc03
 
Introducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BIIntroducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BI
arleyo2006
 
El Liberalismo económico en la sociedad y en el mundo
El Liberalismo económico en la sociedad y en el mundoEl Liberalismo económico en la sociedad y en el mundo
El Liberalismo económico en la sociedad y en el mundo
SandraBenitez52
 
ACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLA
ACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLAACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLA
ACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLA
JAVIER SOLIS NOYOLA
 

Último (20)

c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptxc3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
c3.hu3.p3.p2.Superioridad e inferioridad en la sociedad.pptx
 
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
 
El fundamento del gobierno de Dios. El amor
El fundamento del gobierno de Dios. El amorEl fundamento del gobierno de Dios. El amor
El fundamento del gobierno de Dios. El amor
 
Libro infantil sapo y sepo un año entero pdf
Libro infantil sapo y sepo un año entero pdfLibro infantil sapo y sepo un año entero pdf
Libro infantil sapo y sepo un año entero pdf
 
T3-Instrumento de evaluacion_Planificación Analìtica_Actividad con IA.pdf
T3-Instrumento de evaluacion_Planificación Analìtica_Actividad con IA.pdfT3-Instrumento de evaluacion_Planificación Analìtica_Actividad con IA.pdf
T3-Instrumento de evaluacion_Planificación Analìtica_Actividad con IA.pdf
 
Proceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de PamplonaProceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de Pamplona
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
 
Friedrich Nietzsche. Presentación de 2 de Bachillerato.
Friedrich Nietzsche. Presentación de 2 de Bachillerato.Friedrich Nietzsche. Presentación de 2 de Bachillerato.
Friedrich Nietzsche. Presentación de 2 de Bachillerato.
 
Junio 2024 Fotocopiables Ediba actividades
Junio 2024 Fotocopiables Ediba actividadesJunio 2024 Fotocopiables Ediba actividades
Junio 2024 Fotocopiables Ediba actividades
 
Conocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del ArrabalConocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del Arrabal
 
SESION ORDENAMOS NÚMEROS EN FORMA ASCENDENTE Y DESCENDENTE 20 DE MAYO.docx
SESION ORDENAMOS NÚMEROS EN FORMA ASCENDENTE Y DESCENDENTE 20 DE MAYO.docxSESION ORDENAMOS NÚMEROS EN FORMA ASCENDENTE Y DESCENDENTE 20 DE MAYO.docx
SESION ORDENAMOS NÚMEROS EN FORMA ASCENDENTE Y DESCENDENTE 20 DE MAYO.docx
 
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIACONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
 
CALENDARIZACION DEL MES DE JUNIO - JULIO 24
CALENDARIZACION DEL MES DE JUNIO - JULIO 24CALENDARIZACION DEL MES DE JUNIO - JULIO 24
CALENDARIZACION DEL MES DE JUNIO - JULIO 24
 
El fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docxEl fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docx
 
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCIONCAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
 
Semana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptxSemana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptx
 
Presentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos DigitalesPresentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos Digitales
 
Introducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BIIntroducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BI
 
El Liberalismo económico en la sociedad y en el mundo
El Liberalismo económico en la sociedad y en el mundoEl Liberalismo económico en la sociedad y en el mundo
El Liberalismo económico en la sociedad y en el mundo
 
ACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLA
ACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLAACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLA
ACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLA
 

Plsql y paquetes

  • 1. PL/SQL (Procedural Language/SQL ) /• BLOQUES PL/SQL • TIPOS DE DATOSTIPOS DE DATOS • FUNCIONES Y PROCEDIMIENTOS • PAQUETES 1
  • 2. PL/SQL (Procedural Language/SQL ) • PL/SQL es el lenguaje de programación quePL/SQL es el lenguaje de programación que  proporciona Oracle para extender el SQL  estándar con otro tipo de estructuras eestándar con otro tipo de estructuras e  instrucciones 1. Variables y tipos 2. Estructuras de controlst uctu as de co t o • Bucles y sentencias IF‐THEN‐ELSE 3 Procedimientos y funciones3. Procedimientos y funciones 4. Tipos de objetos y métodos 2
  • 3. PL/SQL (Procedural Language/SQL ) • PL/SQL permite:PL/SQL permite: – Manipular los datos de la BD Manejar errores– Manejar errores  • Definidos por el usuario (excepciones) • Propios del sistema (predefinidos)• Propios del sistema (predefinidos) • La unidad básica de cualquier programa• La unidad básica de cualquier programa  PL/SQL es el bloque C d bl li id d ló i d• Cada bloque realiza una unidad lógica de  trabajo en el programa, separando así unas  dtareas de otras 3
  • 4. PL/SQL (Procedural Language/SQL ) • Estructura básica de un bloque:Estructura básica de un bloque: DECLARE /* Declaración de uso local: variables, cursores, excepciones de usuario, …*/ BEGIN /* Sección ejecutable (obligatoria): órdenes SQL y procedimentales */ EXCEPTIONEXCEPTION /* Zona de control de errores */ ENDEND; 4
  • 5. PL/SQL ‐ Declaración de variables • Sección de Declaración de VariablesSección de Declaración de Variables – Contiene la declaración de: i d d• tipos de datos,  • las constantes  • variables – También se declaran cursores y excepciones definidas por el usuario. – Las variables externas se declaran en SQL*Plus y  se escriben precedidas de ‘:’. 5
  • 6. PL/SQL ‐ Declaración de variables • SintaxisSintaxis nombre variable [CONSTANT] tiponombre_variable [CONSTANT] tipo [NOT NULL] [ l i i i l][:= valor_inicial]; lá l i di l d fi i ió d• La cláusula CONSTANT indica la definición de una  constante que debe ser inicializada y cuyo valor no  d difi dpuede ser modificado • [NOT NULL]: Obliga a tener valor 6
  • 7. PL/SQL ‐ Declaración de variables • SintaxisSintaxis nombre_variable [CONSTANT] tipo [NOT NULL] [:= valor_inicial]; • Tipo: puede ser: Tipo de datos: tipo de dato de la variable– Tipo de datos: tipo de dato de la variable – Identificador%TYPE → Se refiere al tipo usado por una  columna de la tablacolumna de la tabla – Identificador%ROWTYPE → Es una fila variable con los  mismos nombres y tipos que las columnas de una tabla omismos nombres y tipos que las columnas de una tabla o  fila recuperada de un cursor 7
  • 8. PL/SQL ‐ Declaración de variables • Variables y constantes. EjemploVariables y constantes. Ejemplo DECLARE v_DNI NUMBER (8,0); v Nombre VARCHAR (30);_ ( ); c_Factor CONSTANT NUMBER(3,2):=0.10; v DNI2 cliente DNI%TYPE;v_DNI2  cliente.DNI%TYPE; v_precio NUMBER:= 300;  R li t li t %ROWTYPEcur_Rcliente cliente%ROWTYPE; 8
  • 9. PL/SQL ‐ Declaración de variables • CURSORESCURSORES – Cursor es un área de trabajo definida para las  consultas que devuelven más de una fila.  – Permite la manipulación de datosp – Se le pueden pasar parámetros • Tipos de cursores – Cursor simple – Cursores con paso de parámetrosp p – Cursores con actualización 9
  • 10. PL/SQL ‐ Declaración de variables • CURSOR simple. SintaxisCURSOR simple. Sintaxis CURSOR nombre cursor IS sentencia_SELECT; • EjemploEjemplo DECLARE …. CURSOR c_cliente IS  SELECT cliente DNI cliente nombreSELECT cliente.DNI, cliente.nombre FROM cliente WHERE cliente tipo trabajo=´jefe´;WHERE cliente.tipo_trabajo= jefe ; 10
  • 11. PL/SQL ‐ Declaración de variables • CURSORES CON PASO DE PARÁMETROS. SintaxisCURSORES CON PASO DE PARÁMETROS. Sintaxis CURSOR nombre cursor [PARAMETROS] ISCURSOR nombre cursor [PARAMETROS] IS sentencia_SELECT; • Los parámetros de un cursor se pueden utilizar paraLos parámetros de un cursor se pueden utilizar para  definir variables con valores de entrada.  • La consulta SQL asociada se ejecuta utilizando esos• La consulta SQL asociada se ejecuta utilizando esos  valores PARAMETROS• PARAMETROS ‐> (nombre_parametro tipo_parametro, …) 11
  • 12. PL/SQL ‐ Declaración de variables • CURSORES CON PASO DE PARÁMETROS. SintaxisCURSORES CON PASO DE PARÁMETROS. Sintaxis CURSOR nombre cursor [PARAMETROS] ISCURSOR nombre cursor [PARAMETROS] IS sentencia_SELECT; • EJEMPLO:EJEMPLO: CURSOR cur_cliente (v_provincia cliente.provincia%TYPE) IS SELECT dni nombreSELECT dni, nombre FROM clientes WHERE clientes provincia= v provincia;WHERE clientes.provincia= v_provincia; 12
  • 13. PL/SQL ‐ Declaración de variables • CURSORES CON ACTUALIZACIÓN. SintaxisCURSORES CON ACTUALIZACIÓN. Sintaxis CURSOR nombre cursor IS sentencia_SELECT FOR UPDATE [OF nombre columna][ ] S d j d difi l fil• Se dejan preparados para modificar las filas  devueltas y se generan bloqueos exclusivos sobre  l fil tilas filas activas 13
  • 14. PL/SQL ‐ Declaración de variables • CURSORES CON ACTUALIZACIÓN. SintaxisCURSORES CON ACTUALIZACIÓN. Sintaxis CURSOR nombre cursor IS sentencia_SELECT FOR UPDATE [OF nombre columna][ ] • EJEMPLO:  lCURSOR cur_cliente IS  SELECT DNI, nombre  FROM cliente  WHERE tipo_trabajo=´jefe´ FOR UPDATE OF salario; 14
  • 15. PL/SQL ‐ Declaración de variables • OPERACIONES CON CURSORESOPERACIONES CON CURSORES – OPEN: abre los cursores FETCH l l d t– FETCH : lee los datos – CLOSE: cierra los cursores • Pasos: 1.‐ Declarar el cursor 2.‐ Abrir el cursor en la zona de procedimiento 3.‐ Leer el cursor. Es necesario ejecutar un bucle para leerj p todos los cursores 4.‐ Cerrar el cursor 15
  • 16. PL/SQL ‐ Declaración de variables • ATRIBUTOS DE LOS CURSORESATRIBUTOS DE LOS CURSORES – Se le añaden al nombre del cursor  %NOTFOUND → Se usa para detectar el final de  un cursor. Devuelve TRUE si la ultima lecturaun cursor. Devuelve TRUE si la ultima lectura  falla porque no hay filas disponibles y FALSE si  recuperarecupera %FOUND → El contrario de %NOTFOUND %ROWCOUNT D l l ú d fil l íd%ROWCOUNT → Devuelve el número de fila leída %ISOPEN → Devuelve TRUE si el cursor esta  abierto y  FALSE si no lo está 16
  • 17. PL/SQL – Declaración de variables • Ejemplo uso cursorEjemplo uso cursor DECLARE CURSOR cur_emp IS SELECT DNI, nombre FROM empleado; emp registro cur emp%ROWTYPE;emp registro cur emp%ROWTYPE; BEGIN OPEN cur_emp; LOOP FETCH cur_emp INTO emp_registro; EXIT WHEN %NOTFOUNDEXIT WHEN cur emp%NOTFOUND; ... END LOOP;END LOOP; CLOSE cur_emp; END; 17
  • 18. PL/SQL ‐ Declaración de variables • EXCEPCIONESEXCEPCIONES – Excepciones predefinidas en PL/SQL que  informan de los errores producidos en la  ejecución de las sentencias SQL por parte del  sistema de gestión de bases de datos. – Además de éstas, el programador puede definir , p g p excepciones de uso específico. – Controlan los errores de ejecución de unControlan los errores de ejecución de un  programa, previstos por el programador El control de las excepciones de usuario es– El  control de las excepciones de usuario es  enteramente gestionado por él.  18
  • 19. PL/SQL ‐ Declaración de variables • EXCEPCIONES. SintaxisEXCEPCIONES. Sintaxis nombre_excepción EXCEPTION; – Cada excepción trata un error – No son variables y no se las puede tratar comoNo son variables y no se las puede tratar como  tal No pueden utilizarse como argumentos en– No pueden utilizarse como argumentos en  funciones ni en procedimientos S ti di t l t i RAISE– Se activan mediante la sentencia RAISE RAISE nombre_excepción; 19
  • 20. PL/SQL – Sección de excepciones • EjemploEjemplo DECLARE e hay emp EXCEPTION;e_hay_emp EXCEPTION; v_dep departamento.depnum%TYPE := 10; BEGIN IF (SELECT COUNT(*) FROM empleados WHERE depnum = v_dep)=0 THEN RAISE e_dep_vacio; ELSE END IF;ELSE  …  END IF; … END; 20
  • 21. PL/SQL – Tipos de datos estructurados • Entre los tipos de datos estructurados queEntre los tipos de datos estructurados que  proporciona PL/SQL están:  – los registros (RECORD)g ( ) – los vectores (TABLE y VARRAY).  • Se declaran en la sección DECLARE 21
  • 22. PL/SQL – Tipos de datos estructurados • REGISTROS – SintaxisREGISTROS  Sintaxis  TYPE nombre_tipo IS RECORD (campo tipo[, campo tipo] ...); – Ejemplo: TYPE tipo_empleado_reg IS RECORD ( nombre VARCHAR2(10),( ( ), puesto VARCHAR2(8), sueldo NUMBER(6)( ) ); 22
  • 23. PL/SQL – Tipos de datos estructurados • REGISTROS – creación de variablesREGISTROS  creación de variables  Nombre_variable tipo_reg; – Ejemplo: v_empleado_reg tipo_empleado_reg; • Referenciar las variables Nombre_variable.campo:=valor 23
  • 24. PL/SQL – Tipos de datos estructurados • VECTORES Y TABLAS – SintaxisVECTORES Y TABLAS  Sintaxis TYPE nombre_tipo IS VARRAY (tamaño_max) OF tipo_datos [NOT NULL]; TYPE nombre_tipo IS TABLE OF tipo_datos [NOT NULL]; – La tabla puede crecer ilimitadamente – El vector solo puede crecer hasta el tamañoEl vector solo puede crecer hasta el tamaño  máximo definido 24
  • 25. PL/SQL – Tipos de datos estructurados • VECTORESVECTORES TYPE nombre_tipo IS VARRAY (tamaño_max) OF tipo_datos [NOT NULL]; – Para poder utilizar los vectores, deben ser  previamente creados vacíos o con elementos.  – Para insertar elementos adicionales se tienen quePara insertar elementos adicionales se tienen que  extender mediante la cláusula EXTEND – En los vectores no se pueden borrar elementos– En los vectores no se pueden borrar elementos 25
  • 26. PL/SQL – Tipos de datos estructurados • VECTORESVECTORES – Ejemplo: DECLAREDECLARE TYPE t_varray IS VARRAY (50) OF empleado.nombre%TYPE; v varray t varray;v_varray t_varray; BEGIN ... v_varray := t_varray(‘Ana’, ‘Lola’);‐‐ se crea con dos elementos v_varray.EXTEND; v varray(3) ‘Luis’v_varray(3) := ‘Luis’; v_varray.EXTEND; v varray(4) := ‘Juan’; _ y( ) ; .... END; 26
  • 27. PL/SQL – Tipos de datos estructurados • TABLASTABLAS  TYPE nombre_tipo IS TABLE OF tipo datos [NOT NULL]OF tipo_datos [NOT NULL]; – En los tipo TABLE se pueden borrar elementos con  la instrucción DELETE, pudiendo quedar huecos  intermedios vacíos  – Se pueden volver a llenar con una asignación. La  función EXISTS nos permite saber si un elemento  se puede referenciar o ha sido borrado 27
  • 28. PL/SQL – Tipos de datos estructurados • TABLAS – EjemploTABLAS  Ejemplo DECLARE TYPE t table IS TABLE OF empleado.nombre%TYPE;_ p ; v_table t_table; BEGIN v_table := t_table(‘Ana’, ‘Lola’); v_table(2) := NULL; ‐‐Dejar una posición vacía v table1 DELETE(1); Así es como se borra una posiciónv_table1.DELETE(1);‐‐Así es como se borra una posición v_table1.EXTEND; v table1(3) := ‘Luis’;_ ( ) ; IF v_table1(1).EXISTS THEN ...; ELSE v_table1(1) := ‘Pepe’; END IF; END; 28
  • 29. PL/SQL – Tipos de datos estructurados • VECTORES Y TABLAS – Métodos predefinidosVECTORES Y TABLAS  Métodos predefinidos – COUNT → Devuelve el número de filas de la tabla DELETE (nº) → Borra las filas de una tabla– DELETE (nº) → Borra las filas de una tabla – EXITS (nº) → Devuelve TRUE si existe en la tabla la fila  especificadaespecificada – FIRST → Devuelve el índice de la primera fila – LAST → Devuelve el índice de la última fila– LAST → Devuelve el índice de la última fila – NEXT → Devuelve el índice de la fila de la tabla que sigue a  la fila especificadala fila especificada – PRIOR → Devuelve el índice de la fila de la tabla que  precede a la fila especificadap p 29
  • 30. PL/SQL – Sección Ejecutable • Sección EjecutableSección Ejecutable –Tres clases de instrucciones • Instrucciones de asignacióng • Instrucciones de control de flujo • Bucles• Bucles –Instrucciones no permitidas son:  DROP CREATE ALTERDROP, CREATE, ALTER, … 30
  • 31. PL/SQL – Sección Ejecutable • Instrucciones de asignaciónInstrucciones de asignación variable := expresión;p ; • Expresiones• Expresiones: – Pueden incluir literales, variables y constantes  definidas en el bloque – También funciones aplicadas sobre literales,  constantes y variables.  31
  • 32. PL/SQL – Sección Ejecutable • Instrucciones de asignación‐ Asignación deInstrucciones de asignación Asignación de  sentencias SQL – Es posible realizar la asignación del resultado de  una SELECT  a una lista de variables o a un cursor. – Si se asigna a una lista de variables,  la consulta  asociada sólo debe dar como resultado una únicaasociada sólo debe dar como resultado una única  fila (en caso contrario se genera una excepción) – Cuando no se conoce a priori el número de filas– Cuando no se conoce a priori el número de filas  del resultado, resulta más conveniente utilizar  cursorescursores. 32
  • 33. PL/SQL – Sección Ejecutable • Literales:Literales: – Las cadenas de caracteres se delimitan por la  comilla simplecomilla simple. – Los números reales pueden especificarse tanto  en formato decimal como científico – Operadores sobre Números: +, ‐, *, /, **, MOD – Operadores sobre cadenas: || (concatenación)Operadores sobre cadenas: || (concatenación). – Operadores lógicos: AND, OR, NOT. 33
  • 34. PL/SQL – Sección Ejecutable • Literales:Literales: – Operadores sobre cursores:  %ROWCOUNT,  %NOTFOUND,  %FOUND,  %ISOPEN. – Comparadores clásicos: < <= = != ^= < =<, <=, =, !=,  =, <, = – Comparadores SQL:  [ ] [ ][NOT] LIKE, IS [NOT] NULL, [NOT] BETWEEN..AND.., [NOT] IN 34
  • 35. PL/SQL – Sección Ejecutable • Funciones:Funciones: – Funciones sobre cadenas de caracteres:  ASCII CHR LENGTH LOWER SUBSTR UPPERASCII, CHR, LENGTH, LOWER, SUBSTR, UPPER, … – Funciones numéricas: ABS, FLOOR, MOD,ROUND, SQRT,  TRUNCTRUNC, … – Funciones sobre fechas: ADD_MONTHS, LAST_DAY,  MONTHS BETWEEN, NEXT DAY, SYSDATE, TRUNC.MONTHS_BETWEEN, NEXT_DAY,  SYSDATE, TRUNC. – Funciones de conversión: TO_CHAR, TO_DATE,  TO_NUMBER._ – Funciones de control de errores: SQLCODE, SQLERRM – … 35
  • 36. PL/SQL – Sentencias de Control de flujo • Sentencias de Control de flujoSentencias de Control de flujo – Realizan el control del comportamiento del  bloquebloque. – Tipos: • Condicionales (IF) • Bucles  –Los bucles permiten repetir un número de  veces un conjunto de instruccionesveces un conjunto de instrucciones  PL/SQL. Para romper el bucle se usa EXIT GOTO o–Para romper el bucle se usa EXIT, GOTO o  RAISE 36
  • 37. PL/SQL – Sentencias de Control de flujo • CONDICIONALES (IF)CONDICIONALES (IF) – Ejecuta una o varias sentencias dependiendo de  una condiciónuna condición IF condición THEN instrucciones; [ELSIF condición THEN instrucciones] [ELSE instrucciones]; …… EN DIF 37
  • 38. PL/SQL – Sentencias de Control de flujo • BUCLESBUCLES – Bucles simples (LOOP). – Bucles condicionales (WHILE) – Bucles numéricos (FOR) – Bucles sobre cursores – Bucles sobre sentencias SELECTBucles sobre sentencias SELECT 38
  • 39. PL/SQL – Sentencias de Control de flujo • BUCLES SIMPLES (LOOP) – SintaxisBUCLES SIMPLES (LOOP)  Sintaxis [nombre_bucle] LOOP sentencias; END LOOPEND LOOP; • Ejemplo DECLARE v_contador BINARY_INTEGER:=1; BEGINBEGIN LOOP INSERT INTO tabla_temporal S ( d j l )VALUES (v contador,’ejemplo’); v_contador:=v_contador+1; EXIT WHEN v_contador>50; END LOOP; END; 39
  • 40. PL/SQL – Sentencias de Control de flujo • BUCLES CONDICIONALES (WHILE)BUCLES CONDICIONALES (WHILE) – La condición se evalúa antes de entrar en el  buclebucle [nombre_bucle] WHILE condición LOOP sentencias; END LOOP; 40
  • 41. PL/SQL – Sentencias de Control de flujo • BUCLES CONDICIONALES (WHILE)BUCLES CONDICIONALES (WHILE) – Ejemplo DECLAREDECLARE v_contador BINARY_INTEGER:=1; BEGIN WHILE v_contador<=50 LOOP INSERT INTO tabla_temporal VALUES (v_contador,’ejemplo’); v_contador:=v_contador+1; END LOOP; END; 41
  • 42. PL/SQL – Sentencias de Control de flujo • BUCLES NUMÉRICOS (FOR)BUCLES NUMÉRICOS (FOR) – Se ejecutan una sola vez por cada elemento de  rango definidorango definido [nombre_bucle] FOR indice IN [REVERSE] e p n1 e p n2 LOOPexp n1..exp n2 LOOP sentencias; END LOOPEND LOOP; – indice: variable numérica de control empieza en  1 i 2exp_n1 y termina en exp_n2 . – Se declara implícitamente como un  BINARY_INTEGER 42
  • 43. PL/SQL – Sentencias de Control de flujo • BUCLES NUMÉRICOS (FOR)BUCLES NUMÉRICOS (FOR) – Se ejecutan una sola vez por cada elemento de  rango definidorango definido [nombre_bucle] FOR indice IN [REVERSE] e p n1 e p n2 LOOP[REVERSE] exp n1..exp n2 LOOP sentencias; END LOOPEND LOOP; [ V S ] L h l é– [REVERSE]: La cuenta se hace al revés  – Exp_n1, y exp_n2 pueden ser ctes o cualquier  expresión que devuelva un número 43
  • 44. PL/SQL – Sentencias de Control de flujo • BUCLES NUMÉRICOS (FOR)BUCLES NUMÉRICOS (FOR) – Ejemplo BEGIN FOR v_contador IN 1..50 LOOP INSERT INTO tabla_temporal VALUES (v_contador,’ejemplo’); END LOOP; END; 44
  • 45. PL/SQL – Sentencias de Control de flujo • BUCLES SOBRE CURSORESBUCLES SOBRE CURSORES – En un bucle sobre cursores se declara de modo  implícito la variable fila  asociada.  – Asimismo, se realiza un OPEN del cursor al entrar  en el bucle y un CLOSE al saliry – Se produce un FETCH implícito en cada iteración  del bucledel bucle. 45
  • 46. PL/SQL – Sentencias de Control de flujo • BUCLES SOBRE CURSORESBUCLES SOBRE CURSORES – Ejemplo: DECLAREDECLARE CURSOR cur_emp IS SELECT num_empleado, nomb_empleado FROM  empleado; BEGINBEGIN FOR emp_registro IN cur_emp LOOP IF i t d d 30 THENIF emp_registro.edad>30 THEN ... END LOOP; END; 46
  • 47. PL/SQL – Sentencias de Control de flujo • BUCLES SOBRE SENTENCIAS SELECTBUCLES SOBRE SENTENCIAS SELECT – Es el mismo concepto anterior pero sin  declaración de cursoresdeclaración de cursores [nombre bucle][nombre_bucle] FOR nombre_registro IN (sentencia_select) LOOP t iLOOP sentencias END LOOP; – Cuando se sale con exit o error del bucle el  cursor interno que genera ORACLE se cierracursor interno que genera ORACLE se cierra 47
  • 48. PL/SQL – Sentencias de Control de flujo • BUCLES SOBRE SENTENCIAS SELECTBUCLES SOBRE SENTENCIAS SELECT – Ejemplo BEGIN FOR registro IN (SELECT DNI, nombre FROM cliente)g ( , ) LOOP INSERT INTO tabla temporal_ p (contador, texto) VALUES (registro.DNI, registro.nombre);VALUES (registro.DNI, registro.nombre); END LOOP; END;END; 48
  • 49. PL/SQL – Sentencias de Control de flujo • GOTO y ETIQUETASGOTO y ETIQUETAS – transfiere el control a la sentencia o bloque  siguiente a la etiqueta indicadasiguiente a la etiqueta indicada <<etiqueta>> GOTO <<etiqueta>>; – La sentencia puede ir a otro bloque o sub‐bloque  pero nunca a la zona de excepciones. – La sentencia siguiente a la etiqueta debe ser un ejecutable. – No se puede realizar saltos al interior de un IF o– No se puede realizar saltos al interior de un IF o  de un bucle. 49
  • 50. PL/SQL – Sección de excepciones • Manejo de excepcionesManejo de excepciones – Permite responder ante cualquier problema que– Permite responder ante cualquier problema que  pueda ocurrir en la ejecución de cualquier  operaciónoperación – La ejecución de la aplicación finaliza al  t l úpresentarse algún error grave – Mediante el manejo de excepciones es posible  realizar una serie de acciones y continuar la  ejecución de la aplicación. 50
  • 51. PL/SQL – Sección de excepciones • Manejo de excepcionesManejo de excepciones WHEN excepciones THEN instrucciones;WHEN excepciones THEN instrucciones; – Donde excepciones:  excep_múltiples | OTHERS – Donde excep múltiples:Donde excep_múltiples:  excepción | excepción OR excep_múltiples 51
  • 52. PL/SQL – Sección de excepciones • Manejo de excepcionesManejo de excepciones – La activación de una excepción la realiza el– La activación de una excepción la realiza el  sistema o el programa mediante utilización de la  sentencia RAISEsentencia RAISE – Cuando una excepción se activa, la ejecución  ti ú l t d j d dcontinúa en la parte de manejadores de  excepciones  – Si no existe la excepción activada en la sección de  excepciones, la excepción sigue activa por si  tuviera que ser tratada en otro nivel.  52
  • 53. PL/SQL – Sección de excepciones • En la parte de manejadores la ejecución seEn la parte de manejadores, la ejecución se  realiza del modo siguiente: S b j d d l ió– Se busca un manejador que corresponda con la excepción  activada, La cláusula OTHERS corresponde a todas las excepciones– La cláusula OTHERS corresponde a todas las excepciones – Es conveniente poner la cláusula OTHERS la última Una vez encontrado el manejador se desactiva la– Una vez encontrado el manejador, se desactiva la  excepción y se ejecutan las instrucciones asociadas – Si se deseara mantener activa la excepción o se desea– Si se deseara mantener activa la excepción, o se desea  activar cualquier otra, es posible incluir la sentencia RAISE  que finalizaría el bloque y activaría la excepción asociada.q q y p 53
  • 54. PL/SQL – Sección de excepciones • Excepciones predefinidas por Oracle:Excepciones predefinidas por Oracle: – NO_DATA_FOUND, TOO_MANY_ROWS → Ocurren cuando un select no selecciona nada o  selecciona varias filas cuando sólo se esperaba una – INVALID_NUMBER, VALUE_ERROR, ZERO_DIVIDE → S d i i lid d t t i t dSe producen por operaciones invalidas de tratamiento de  números DUP VAL ON INDEX →– DUP_VAL_ON_INDEX → Se produce cuando se intenta insertar una clave primaria  duplicadaduplicada. 54
  • 55. PL/SQL – Sección de excepciones • Excepciones predefinidas por Oracle:Excepciones predefinidas por Oracle: – CURSOR_ALREADY_OPEN → Ocurre al intentar abrir  un cursor ya abierto – INVALID_CURSOR → Ocurre al intentar hacer una operación invalida sobre un cursor – PROGRAM_ERROR, STORAGE_ERROR,  TIMEOUT ON RESOURCE →TIMEOUT_ON_RESOURCE → Detectan errores de almacenamiento o de ejecución. 55
  • 56. PL/SQL – Sección de excepciones • Manejo de excepciones – EjemploManejo de excepciones  Ejemplo DECLARE e hay emp EXCEPTION;e_hay_emp EXCEPTION; v_dep departamento.depnum%TYPE := 10; BEGIN IF (SELECT COUNT(*) FROM empleados WHERE depnum = v_dep)=0 THEN RAISE e_dep_vacio; ELSE END IF;ELSE  …  END IF; EXCEPTION WHEN e dep vacio THEN RAISE APPLICATION ERROR(‐20001, ‘ElWHEN e_dep_vacio THEN RAISE_APPLICATION_ERROR( 20001,  El  dep. TO_CHAR(v_dep) no tiene empleados .’); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(‘abortado por  d id ’)error desconocido’); END; 56