PL/SQL Francisco Moreno Universidad Nacional.

Slides:



Advertisements
Presentaciones similares
SQL Sigla del nombre “Structured Query Language”.
Advertisements

Unidad 3.
Ejercicios Solemne 2 Parte 1
Introducción a Transact-SQL
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Presentación Asignatura POF030 Semana 1. Contenido En forma general, los conceptos que se estudiarán en la asignatura son: – Procedures – Functions –
Maestría en Bioinformática Bases de Datos y Sistemas de Información Otros objetos de Base de Datos Ing. Alfonso Vicente, PMP
EXCEPCIÓN DE ERRORES.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
UNITA - IBARRA BLOQUES PL-SQL SUBPROGRAMAS Paulina Guevara.
Características Objeto Relacionales en Oracle
Cursores Implícitos y Explícitos
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
1 BD Activas: Motivación zLos SGBD convencionales son “pasivos”. Sólo ejecutan preguntas o transacciones realizadas por los usuarios o por los programas.
PL/SQL Francisco Moreno Universidad Nacional. Introducción al PL/SQL ¿Por qué PL/SQL? A pesar de que SQL tiene mecanismos de control condicional (cláusula.
Bases de Datos Relacionales
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
Ing. Ricardo Carlos Inquilla Quispe
Procedimientos Almacenados Funciones Agregadas
UNITA - IBARRA TRIGGERS
John Freddy Duitama M.U.de.A. Facultad de Ingeniería. Creación del esquema de Una Base de Datos. John Freddy Duitama Muñoz. Facultad de Ingeniería. U.de.A.
PL/SQL Francisco Moreno Universidad Nacional.
Práctica: Sistema de control de ventas y almacenaje para grandes almacenes 03/12/11.
TRIGGERS EN ORACLE 8 J. Iriarte S. España
SQL: DDL Francisco Moreno & Carlos Mario Zapata. SQL:DDL DDL: Lenguaje de Definición de Datos Permite crear objetos en la Base de Datos Tipos de Objetos:
SQL (Structured Query Language / Lenguaje de consulta estructurado)‏
Sesión 9 Construcción de cursores.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Ciclo de vida y operaciones masivas Conceptos básicos.
Triggers(Disparadores)
Características Objeto Relacionales en Oracle
Características Objeto-Relacionales en Oracle Francisco Moreno Universidad Nacional.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
1 Módulo 4 Sentencias SQL. 2 Objetivos Generales Implementar una base de datos Definir los campos, registros, tablas que se encuentran relacionadas en.
Structured Query Language (Lenguaje Estructurado de Consultas)
John Freddy Duitama M.U.de.A. Facultad de Ingeniería. Creación del esquema de Una Base de Datos. John Freddy Duitama Muñoz. Facultad de Ingeniería. U.de.A.
Expresiones algebraicas equivalentes
SQL Sigla del nombre “Structured Query Language”.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
PUESTO-TRABAJO (Código-Puesto, Empresa, Sueldo, DNI- Contratado) TITULADO (DNI-Titulado, Nombre, Apellidos, Dirección) TITULACION (Iden-Titulación, Nombre,
Excepciones definidas por el usuario Semana 7. Aprendizajes esperados Construye procedimientos almacenados, triggers de base de datos, cursores y funciones.
Estructuras de Control
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
Excepciones predefinidas en PL/SQL Semana 6. Aprendizajes esperados Construye procedimientos almacenados, triggers de base de datos, cursores y funciones.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
Ada 2º Parte (variables, ámbitos, subrutinas, tipos abstractos de datos y excepciones)
Usuarios. Colocar el servidor en el modo de autenticación Windows/SqlServer. En SQL Server Management Studio, click derecho, Propiedades en la Instancia.
5 Paquetes ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Base de Datos I – Ing. Mary Carlota Bernal J. BASE DE DATOS I PL/SQL.
Apuntes PL-SQL Triggers II. Tipos de datos compuestos Registros PL/SQL: Son similares a un tipo struct en C o a un tipo Registro en otros 3GL. Se componen.
SQL: DDL.
6 Triggers ORACLE - II Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega.
Mtr. Adrián Monge Monge Educación 2015 Maestría, Mención en Administración de Proyectos ULACITMaestría, Mención en Administración de Proyectos 2012 Licenciatura,
Base de Datos I – Ing. Mary Carlota Bernal J.  Cada instrucción PL/SQL tiene asociado internamente un cursor  Los cursores en PL/SQL pueden ser de dos.
DML Transact SQL Sesión X Triggers. Duración 2 Horas.
4 Excepciones ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
6 Triggers ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos.
6 Triggers ORACLE - III Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Crear una tabla (create table - sp_tables - sp_columns - drop table) Para ver las tablas existentes creadas por los usuarios en una base de datos usamos.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Transcripción de la presentación:

PL/SQL Francisco Moreno Universidad Nacional

Manejo de errores: EXCEPTIONs Una EXCEPTION surge cuando hay un error en tiempo de ejecución Cuando surge una excepción el proceso “salta” a la sección de manejo de las mismas (si no la hay se sale del (sub)bloque donde ocurrió): las instrucciones de esta sección se ejecutan y una vez finalizadas, el (sub)bloque se da por terminado

Hay dos tipos de excepciones: 1. Excepciones predefinidas por Oracle - Son un conjunto de errores definidos en Oracle. No hay que declararlas. - Son disparadas automáticamente por PL/SQL como respuesta a un error 2. Excepciones definidas por el usuario - Se deben declarar - Se deben disparar explícitamente

Algunas de las excepciones predefinidas: TOO_MANY_ROWS INVALID_CURSOR (Ej: Cerrar un cursor que ya estaba cerrado) NO_DATA_FOUND CURSOR_ALREADY_OPEN (Ej: Abrir un cursor que ya estaba abierto) INVALID_NUMBER (Ej: Fallo de conversión, ‘k3b’ no es un número) VALUE_ERROR (Ej: Error de truncamiento) ZERO_DIVIDE DUP_VAL_ON_INDEX

Sea la tabla: DROP TABLE emp; CREATE TABLE emp( cod NUMBER(8) PRIMARY KEY, nom VARCHAR2(15), depto NUMBER(3) ); INSERT INTO emp VALUES(12,'María',10); INSERT INTO emp VALUES(15,'Ana',5); INSERT INTO emp VALUES(76,'Lisa',15);

DECLARE nro_emp emp.cod%TYPE; BEGIN SELECT cod INTO nro_emp FROM emp WHERE nom = 'María'; DBMS_OUTPUT.PUT_LINE('El código de María es: ' || nro_emp); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('María no existe'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('Hay varias Marías'); END; /

CREATE TABLE apuesta(cod NUMBER(8) PRIMARY KEY, cant NUMBER(8) NOT NULL); DECLARE cod_apta apuesta.cod%TYPE; nro_ale apuesta.cant%TYPE; BEGIN FOR i IN 1..20 LOOP cod_apta := ABS(MOD(DBMS_RANDOM.RANDOM,10)); nro_ale := ABS(MOD(DBMS_RANDOM.RANDOM,10)); INSERT INTO apuesta VALUES(cod_apta, nro_ale); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN UPDATE apuesta SET cant = cant + nro_ale WHERE cod = cod_apta; END; END LOOP; / S u b l o q e

Cuando el usuario define sus excepciones, se procede así: Se declaran por medio del tipo de datos EXCEPTION: nombre_excepcion EXCEPTION; Se deben “disparar” mediante la sentencia RAISE nombre_excepcion;

Nota: COUNT, MAX, MIN, SUM, AVG nunca generan las DECLARE nro_emps NUMBER; muy_pocos EXCEPTION; BEGIN SELECT COUNT(*) INTO nro_emps FROM emp; IF nro_emps < 4 THEN RAISE muy_pocos; END IF; DBMS_OUTPUT.PUT_LINE('Hay suficientes empleados: ' || nro_emps); EXCEPTION WHEN muy_pocos THEN DBMS_OUTPUT.PUT_LINE('Muy pocos empleados'); END; / Nota: COUNT, MAX, MIN, SUM, AVG nunca generan las excepciones NO_DATA_FOUND ni TOO_MANY_ROWS, ni siquiera si la tabla está vacía ¿por qué?

El manejo de OTHERS Es una excepción predefinida que sirve para capturar una excepción que no ha sido tratada en el manejador de excepciones Se puede obtener el mensaje del error que ocurrió mediante la función SQLERRM Para el control de excepciones, como mínimo se debería usar OTHERS en todo programa PL/SQL OTHERS se debe escribir de última en el manejador de excepciones Nota. El siguiente ejemplo requiere el permiso: GRANT EXECUTE ON SYS.DBMS_LOCK TO usuario;

CURSOR emp_c IS SELECT * FROM emp FOR UPDATE NOWAIT; BEGIN LOOP DECLARE CURSOR emp_c IS SELECT * FROM emp FOR UPDATE NOWAIT; BEGIN LOOP OPEN emp_c; --Intenta bloquear DBMS_OUTPUT.PUT_LINE('¡OK!'); EXIT; --Sale del ciclo EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Tabla ocupada '|| SQLERRM); DBMS_LOCK.SLEEP(5); --Esperar 5 seg END; END LOOP; COMMIT; / En una sesión ejecutar esta: BEGIN UPDATE emp SET depto = 8; DBMS_LOCK.SLEEP(30); COMMIT; END; / Y en otra sesión ejecutar esta: Ensayar sin el NOWAIT y ver la diferencia

EXCEPTION_INIT No todos los errores de Oracle tienen un nombre de excepción definido. Es posible asociar una excepción de usuario con un error de Oracle así: En el siguiente ejemplo, el error: ORA-01400: cannot insert NULL into () Queda asociado con la excepción llamada es_nulo:

EXCEPTION_INIT DECLARE es_nulo EXCEPTION; PRAGMA EXCEPTION_INIT(es_nulo,-1400); BEGIN RAISE es_nulo; EXCEPTION WHEN es_nulo THEN DBMS_OUTPUT.PUT_LINE(SQLCODE||' '||SQLERRM); END; /

Propagación de las excepciones Caso 1: DECLARE a EXCEPTION; BEGIN … RAISE a; … -- Se dispara la excepción a EXCEPTION WHEN a THEN ... -- Se trata la excepción aquí END; … -- El control continúa aquí

Caso 2: DECLARE a EXCEPTION; b EXCEPTION; BEGIN … RAISE b; EXCEPTION WHEN a THEN -- No se trató b aquí END; WHEN b THEN … -- El control continúa aquí

Caso 3: DECLARE a EXCEPTION; b EXCEPTION; c EXCEPTION; BEGIN … RAISE c; EXCEPTION WHEN a THEN -- No se trató c aquí END; WHEN b THEN … -- No se trató tampoco c aquí -- Aborta

-- Aborta DECLARE val NUMBER(5) := 'hola'; BEGIN … EXCEPTION Caso 4: Error en la zona de declaración DECLARE val NUMBER(5) := 'hola'; BEGIN … EXCEPTION WHEN OTHERS THEN END; -- Aborta -- No la captura

Caso 5: Error en la zona de declaración de un sub-bloque BEGIN … DECLARE x NUMBER(5):= 'Hola'; EXCEPTION WHEN OTHERS THEN END; -- No la captura -- Se trata aquí

WHEN a THEN -- a se trata aquí RAISE b; WHEN b THEN -- No captura a b Caso 6: Excepciones disparadas dentro del bloque EXCEPTION DECLARE a EXCEPTION; b EXCEPTION; BEGIN … RAISE a; EXCEPTION WHEN a THEN -- a se trata aquí RAISE b; WHEN b THEN -- No captura a b END; -- Aborta

Caso 7: Excepciones disparadas dentro del bloque Exception DECLARE a EXCEPTION; b EXCEPTION; BEGIN … RAISE a; EXCEPTION WHEN a THEN -- a se trata aquí RAISE b; WHEN b THEN -- No captura a b END; WHEN b THEN -- b se trata aquí

WHEN OTHERS THEN -- a se captura aquí END; Caso 8: OTHERS captura una excepción de usuario no tratada: DECLARE a EXCEPTION; BEGIN … RAISE a; EXCEPTION WHEN OTHERS THEN -- a se captura aquí END;