• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Plsql y paquetes

on

  • 5,191 views

 

Statistics

Views

Total Views
5,191
Views on SlideShare
5,191
Embed Views
0

Actions

Likes
1
Downloads
100
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Plsql y paquetes Plsql y paquetes Presentation Transcript

    • PL/SQL (Procedural Language/SQL ) • BLOQUES PL/SQL / • TIPOS DE DATOS TIPOS DE DATOS • FUNCIONES Y PROCEDIMIENTOS • PAQUETES 1
    • PL/SQL (Procedural Language/SQL )• PL/SQL es el lenguaje de programación que PL/SQL es el lenguaje de programación que  proporciona Oracle para extender el SQL  estándar con otro tipo de estructuras e  estándar con otro tipo de estructuras e instrucciones 1. Variables y tipos st uctu as de co t o 2. Estructuras de control • Bucles y sentencias IF‐THEN‐ELSE 3. Procedimientos y funciones 3 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 Cada bloque realiza una unidad lógica de  li id d ló i d trabajo en el programa, separando así unas  tareas de otras d 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 */ EXCEPTION /* Zona de control de errores */ END; END 4
    • PL/SQL ‐ Declaración de variables • Sección de Declaración de Variables Sección de Declaración de Variables – Contiene la declaración de: • tipos de datos,  i d d • 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 • Sintaxis nombre_variable nombre variable [CONSTANT] tipo [NOT NULL] [:= valor_inicial]; [ l i i i l] • La cláusula CONSTANT indica la definición de una  lá l i di l d fi i ió d constante que debe ser inicializada y cuyo valor no  puede ser modificado d difi d • [NOT NULL]: Obliga a tener valor 6
    • PL/SQL ‐ Declaración de variables • Sintaxis 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 tabla columna de la tabla – Identificador%ROWTYPE → Es una fila variable con los  mismos nombres y tipos que las columnas de una tabla o  mismos 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. Ejemplo Variables y constantes. Ejemplo DECLARE v_DNI NUMBER (8,0); v_Nombre VARCHAR (30); ( ); c_Factor CONSTANT NUMBER(3,2):=0.10; v_DNI2  v DNI2 cliente.DNI%TYPE; cliente DNI%TYPE; v_precio NUMBER:= 300;  cur_Rcliente R li t cliente%ROWTYPE; li t %ROWTYPE 8
    • PL/SQL ‐ Declaración de variables • CURSORES – Cursor es un área de trabajo definida para las  consultas que devuelven más de una fila.  – Permite la manipulación de datos p – Se le pueden pasar parámetros • Tipos de cursores – Cursor simple – Cursores con paso de parámetros p p – Cursores con actualización 9
    • PL/SQL ‐ Declaración de variables • CURSOR simple. Sintaxis CURSOR simple. Sintaxis CURSOR nombre cursor IS sentencia_SELECT; • Ejemplo DECLARE …. CURSOR c_cliente IS  SELECT cliente.DNI, cliente.nombre SELECT 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. Sintaxis CURSORES CON PASO DE PARÁMETROS. Sintaxis CURSOR nombre cursor [PARAMETROS] IS sentencia_SELECT; • Los parámetros de un cursor se pueden utilizar para Los 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. Sintaxis CURSORES CON PASO DE PARÁMETROS. Sintaxis CURSOR nombre cursor [PARAMETROS] IS sentencia_SELECT; • EJEMPLO: CURSOR cur_cliente (v_provincia cliente.provincia%TYPE) IS SELECT dni, nombre SELECT 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. Sintaxis CURSORES CON ACTUALIZACIÓN. Sintaxis CURSOR nombre cursor IS sentencia_SELECT FOR UPDATE [OF nombre columna] [ ] • S d j Se dejan preparados para modificar las filas  d difi l fil devueltas y se generan bloqueos exclusivos sobre  las filas activas l fil ti 13
    • PL/SQL ‐ Declaración de variables • CURSORES CON ACTUALIZACIÓN. Sintaxis CURSORES CON ACTUALIZACIÓN. Sintaxis CURSOR nombre cursor IS sentencia_SELECT FOR UPDATE [OF nombre columna] [ ] • EJEMPLO:  CURSOR cur_cliente IS  l SELECT DNI, nombre  FROM cliente  WHERE tipo_trabajo=´jefe´ FOR UPDATE OF salario; 14
    • PL/SQL ‐ Declaración de variables • OPERACIONES CON CURSORES OPERACIONES 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 leer j p todos los cursores 4.‐ Cerrar el cursor 15
    • PL/SQL ‐ Declaración de variables • ATRIBUTOS DE LOS CURSORES ATRIBUTOS 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 lectura  un cursor. Devuelve TRUE si la ultima lectura falla porque no hay filas disponibles y FALSE si  recupera %FOUND → El contrario de %NOTFOUND %ROWCOUNT → Devuelve el número de fila leída %ROWCOUNT D l l ú d fil l íd %ISOPEN → Devuelve TRUE si el cursor esta  abierto y  FALSE si no lo está 16
    • PL/SQL – Declaración de variables• Ejemplo uso cursor Ejemplo uso cursor DECLARE CURSOR cur_emp IS SELECT DNI, nombre FROM empleado; emp registro cur emp%ROWTYPE; BEGIN OPEN cur_emp; LOOP FETCH cur_emp INTO emp_registro; EXIT WHEN cur emp%NOTFOUND; %NOTFOUND ... END LOOP; CLOSE cur_emp; 17 END;
    • PL/SQL ‐ Declaración de variables • EXCEPCIONES – 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 un Controlan 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. Sintaxis EXCEPCIONES. Sintaxis nombre_excepción EXCEPTION; – Cada excepción trata un error – No son variables y no se las puede tratar como No 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 –SSe activan mediante la sentencia RAISE ti di t l t i RAISE RAISE nombre_excepción; 19
    • PL/SQL – Sección de excepciones• Ejemplo DECLARE e_hay_emp 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 que Entre 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 – Sintaxis REGISTROS  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 variables REGISTROS  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 – Sintaxis VECTORES Y TABLAS  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ño El vector solo puede crecer hasta el tamaño  máximo definido 24
    • PL/SQL – Tipos de datos estructurados • VECTORES 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 que Para 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 • VECTORES – Ejemplo: DECLARE 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( ) ; .... 26 END;
    • PL/SQL – Tipos de datos estructurados • TABLAS TABLAS  TYPE nombre_tipo IS TABLE OF tipo datos [NOT NULL] tipo_datos 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 – Ejemplo TABLAS  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ón v 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 predefinidos VECTORES 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  especificada – 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 especificada la fila especificada – PRIOR → Devuelve el índice de la fila de la tabla que  p precede a la fila especificada p 29
    • PL/SQL – Sección Ejecutable• Sección Ejecutable Sección Ejecutable – Tres clases de instrucciones • Instrucciones de asignación g • Instrucciones de control de flujo • Bucles – Instrucciones no permitidas son:  DROP, CREATE, ALTER, … DROP CREATE ALTER 30
    • PL/SQL – Sección Ejecutable• Instrucciones de asignación Instrucciones 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 de Instrucciones 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 única  asociada 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  cursores. cursores 32
    • PL/SQL – Sección Ejecutable• Literales: – Las cadenas de caracteres se delimitan por la  comilla simple. comilla 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: – 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 sobre cadenas de caracteres:  ASCII, CHR, LENGTH, LOWER, SUBSTR, UPPER, … ASCII CHR LENGTH LOWER SUBSTR UPPER – Funciones numéricas: ABS, FLOOR, MOD,ROUND, SQRT,  TRUNC, … TRUNC – 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 flujo Sentencias de Control de flujo – Realizan el control del comportamiento del  bloque. bloque – Tipos: • Condicionales (IF) • Bucles  –Los bucles permiten repetir un número de  veces un conjunto de instrucciones  veces 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ón una condición IF condición THEN instrucciones; [ELSIF condición THEN instrucciones] [ELSE instrucciones]; …… EN DIF 37
    • PL/SQL – Sentencias de Control de flujo • BUCLES – Bucles simples (LOOP). – Bucles condicionales (WHILE) – Bucles numéricos (FOR) – Bucles sobre cursores – Bucles sobre sentencias SELECT Bucles sobre sentencias SELECT 38
    • PL/SQL – Sentencias de Control de flujo • BUCLES SIMPLES (LOOP) – Sintaxis BUCLES SIMPLES (LOOP)  [nombre_bucle] LOOP sentencias; END LOOP LOOP; • Ejemplo DECLARE v_contador BINARY_INTEGER:=1; BEGIN LOOP INSERT INTO tabla_temporal VALUES ( contador,’ejemplo’); S (v d j l ) v_contador:=v_contador+1; EXIT WHEN v_contador>50; END LOOP; END; 39
    • PL/SQL – Sentencias de Control de flujo • BUCLES CONDICIONALES (WHILE) CONDICIONALES (WHILE) – La condición se evalúa antes de entrar en el  bucle [nombre_bucle] WHILE condición LOOP sentencias; END LOOP; 40
    • PL/SQL – Sentencias de Control de flujo • BUCLES CONDICIONALES (WHILE) CONDICIONALES (WHILE) – Ejemplo DECLARE 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 definido rango definido [nombre_bucle] FOR indice IN [REVERSE] exp n1 e p e p n1..exp n2 LOOP sentencias; END LOOP; LOOP – indice: variable numérica de control empieza en  exp_n1 y termina en exp_n2 . 1 i 2 – 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 definido rango definido [nombre_bucle] FOR indice IN [REVERSE] e p n1 e p n2 LOOP exp n1..exp sentencias; END LOOP; LOOP –[ V S ] L [REVERSE]: La cuenta se hace al revés  h l é – 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 CURSORES BUCLES 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 salir y – Se produce un FETCH implícito en cada iteración  del bucle. del bucle 45
    • PL/SQL – Sentencias de Control de flujo • BUCLES SOBRE CURSORES BUCLES SOBRE CURSORES – Ejemplo: DECLARE CURSOR cur_emp IS SELECT num_empleado, nomb_empleado FROM  empleado; BEGIN FOR emp_registro IN cur_emp LOOP IF emp_registro.edad>30 THEN ... IF it d d 30 THEN END LOOP; END; 46
    • PL/SQL – Sentencias de Control de flujo • BUCLES SOBRE SENTENCIAS SELECT BUCLES SOBRE SENTENCIAS SELECT – Es el mismo concepto anterior pero sin  declaración de cursores declaración de cursores [nombre_bucle] [nombre bucle] FOR nombre_registro IN (sentencia_select) LOOP sentencias LOOP t i END LOOP; – Cuando se sale con exit o error del bucle el  cursor interno que genera ORACLE se cierra cursor interno que genera ORACLE se cierra 47
    • PL/SQL – Sentencias de Control de flujo • BUCLES SOBRE SENTENCIAS SELECT BUCLES 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; 48
    • PL/SQL – Sentencias de Control de flujo • GOTO y ETIQUETAS GOTO y ETIQUETAS – transfiere el control a la sentencia o bloque  siguiente a la etiqueta indicada siguiente 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 excepciones Manejo de excepciones – Permite responder ante cualquier problema que Permite responder ante cualquier problema que  pueda ocurrir en la ejecución de cualquier  operación – La ejecución de la aplicación finaliza al  presentarse algún error grave t l ú – 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 excepciones Manejo de excepciones 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 excepciones Manejo 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 RAISE sentencia RAISE – Cuando una excepción se activa, la ejecución  continúa en la parte de manejadores de  ti ú l t d j d d 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 se En la parte de manejadores, la ejecución se  realiza del modo siguiente: –S b Se busca un manejador que corresponda con la excepción  j d d l ió 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  q que finalizaría el bloque y activaría la excepción asociada. 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 → Se producen por operaciones invalidas de tratamiento de  S d i i lid d t t i t d números – DUP VAL ON INDEX → DUP_VAL_ON_INDEX → Se produce cuando se intenta insertar una clave primaria  duplicada. duplicada 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 – Ejemplo Manejo de excepciones  DECLARE e_hay_emp 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,  El  WHEN 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  error desconocido’); d id ’) END; 56