SlideShare una empresa de Scribd logo
1 de 56
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Introducción a C++
Introducción a C++Introducción a C++
Introducción a C++Areli1215
 
Instrucciones C++
Instrucciones C++Instrucciones C++
Instrucciones C++grachika
 
Clase 3introduccion a_lenguace_c
Clase 3introduccion a_lenguace_cClase 3introduccion a_lenguace_c
Clase 3introduccion a_lenguace_ckikeMerck
 
Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3karlalopezbello
 
Seleccion de datos_sql_2005
Seleccion de datos_sql_2005Seleccion de datos_sql_2005
Seleccion de datos_sql_2005zankero
 
Estructuras de los lenguajes de programacion
Estructuras de los lenguajes de programacionEstructuras de los lenguajes de programacion
Estructuras de los lenguajes de programacionManuelDorante65
 
Oracle pl sql
Oracle pl sqlOracle pl sql
Oracle pl sqlclaudia_m
 
Instrucciones para c_
Instrucciones para c_Instrucciones para c_
Instrucciones para c_GamePlayer35
 
Palabras Reservadas en C++
Palabras Reservadas en C++Palabras Reservadas en C++
Palabras Reservadas en C++ncrmax
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivastacubomx
 
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMAMODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMAgbermeo
 
Introducción a Sql
Introducción a SqlIntroducción a Sql
Introducción a Sqlalexmerono
 
Capitulo 2 tipos de datos en c
Capitulo 2 tipos de datos en cCapitulo 2 tipos de datos en c
Capitulo 2 tipos de datos en cecastelocc
 
Mejoras en T-SQL para SQL Server 2005
Mejoras en T-SQL para SQL Server 2005Mejoras en T-SQL para SQL Server 2005
Mejoras en T-SQL para SQL Server 2005pabloesp
 

La actualidad más candente (20)

Tsql
TsqlTsql
Tsql
 
OPERADORES PARA C++
OPERADORES PARA C++OPERADORES PARA C++
OPERADORES PARA C++
 
Introducción a C++
Introducción a C++Introducción a C++
Introducción a C++
 
44777047 oracle
44777047 oracle44777047 oracle
44777047 oracle
 
Instrucciones C++
Instrucciones C++Instrucciones C++
Instrucciones C++
 
Clase 3introduccion a_lenguace_c
Clase 3introduccion a_lenguace_cClase 3introduccion a_lenguace_c
Clase 3introduccion a_lenguace_c
 
Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3
 
Seleccion de datos_sql_2005
Seleccion de datos_sql_2005Seleccion de datos_sql_2005
Seleccion de datos_sql_2005
 
Estructuras de los lenguajes de programacion
Estructuras de los lenguajes de programacionEstructuras de los lenguajes de programacion
Estructuras de los lenguajes de programacion
 
Oracle pl sql
Oracle pl sqlOracle pl sql
Oracle pl sql
 
Instrucciones para c_
Instrucciones para c_Instrucciones para c_
Instrucciones para c_
 
Palabras Reservadas en C++
Palabras Reservadas en C++Palabras Reservadas en C++
Palabras Reservadas en C++
 
Elementos
ElementosElementos
Elementos
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
 
Comandos SQL
Comandos SQLComandos SQL
Comandos SQL
 
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMAMODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
 
Introducción a Sql
Introducción a SqlIntroducción a Sql
Introducción a Sql
 
Introdução a abap
Introdução a abapIntrodução a abap
Introdução a abap
 
Capitulo 2 tipos de datos en c
Capitulo 2 tipos de datos en cCapitulo 2 tipos de datos en c
Capitulo 2 tipos de datos en c
 
Mejoras en T-SQL para SQL Server 2005
Mejoras en T-SQL para SQL Server 2005Mejoras en T-SQL para SQL Server 2005
Mejoras en T-SQL para SQL Server 2005
 

Destacado

5 clasificacion de acciones de la socioedad anonima
5 clasificacion de acciones de la socioedad anonima 5 clasificacion de acciones de la socioedad anonima
5 clasificacion de acciones de la socioedad anonima smileinfected
 
Administración y programación en sql server
Administración y programación en sql serverAdministración y programación en sql server
Administración y programación en sql serverIsabel_Samir
 
Acciones clases tipos
Acciones clases tiposAcciones clases tipos
Acciones clases tiposAlan Chero
 

Destacado (7)

Adm Financiera: Bonos Y Acciones
Adm Financiera: Bonos Y AccionesAdm Financiera: Bonos Y Acciones
Adm Financiera: Bonos Y Acciones
 
Clases De Acciones
Clases De AccionesClases De Acciones
Clases De Acciones
 
Acciones
AccionesAcciones
Acciones
 
5 clasificacion de acciones de la socioedad anonima
5 clasificacion de acciones de la socioedad anonima 5 clasificacion de acciones de la socioedad anonima
5 clasificacion de acciones de la socioedad anonima
 
Administración y programación en sql server
Administración y programación en sql serverAdministración y programación en sql server
Administración y programación en sql server
 
Acciones clases tipos
Acciones clases tiposAcciones clases tipos
Acciones clases tipos
 
Las acciones
Las accionesLas acciones
Las acciones
 

Similar a PLSQL y paquetes

Similar a PLSQL y paquetes (20)

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
 
Tsql
TsqlTsql
Tsql
 
71946780 manual-pl-sql-espanol
71946780 manual-pl-sql-espanol71946780 manual-pl-sql-espanol
71946780 manual-pl-sql-espanol
 
02 instrucciones
02   instrucciones02   instrucciones
02 instrucciones
 
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)
 
Unid2 transact sql 1
Unid2  transact sql 1Unid2  transact sql 1
Unid2 transact sql 1
 
Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursores
 
103305862 t-sql
103305862 t-sql103305862 t-sql
103305862 t-sql
 
t-sql
t-sqlt-sql
t-sql
 
P1_SQL_Repaso.pdf
P1_SQL_Repaso.pdfP1_SQL_Repaso.pdf
P1_SQL_Repaso.pdf
 
Diapositivas transact sql
Diapositivas transact sqlDiapositivas transact sql
Diapositivas transact 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
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++
 
LENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQLLENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQL
 
Exposición
ExposiciónExposición
Exposición
 
TRANSACT-SQL
TRANSACT-SQLTRANSACT-SQL
TRANSACT-SQL
 
Exposición
ExposiciónExposición
Exposición
 
1 clase de Ps /sql
    1  clase  de  Ps /sql     1  clase  de  Ps /sql
1 clase de Ps /sql
 
LENGUAJE TRANSACT SQL
 LENGUAJE TRANSACT SQL LENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQL
 

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

La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscaeliseo91
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 

Último (20)

La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fisca
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 

PLSQL y paquetes

  • 1. PL/SQL (Procedural Language/SQL ) • BLOQUES PL/SQL / • TIPOS DE DATOS TIPOS DE DATOS • FUNCIONES Y PROCEDIMIENTOS • PAQUETES 1
  • 2. 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
  • 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 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
  • 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 */ EXCEPTION /* Zona de control de errores */ END; END 4
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 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; • 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
  • 12. 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
  • 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] [ ] • 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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;
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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;
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. 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
  • 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] 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
  • 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 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
  • 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 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
  • 46. 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
  • 47. 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
  • 48. 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
  • 49. 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
  • 50. 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
  • 51. 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
  • 52. 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
  • 53. 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
  • 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 → 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
  • 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 – 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