Está en la página 1de 32

BASE DE DATOS

Semana 17
¿Donde estamos?
Recordando
 Triggers
Objetivo  Tratamiento de errores.
 En lugar de indicar explicitamente el tipo y la longitud
de una variabl, existe la posibilidad de utilizar los

DIFERENCIA atributos %TYPE y %ROWTYPE para declarar variables


que sean del mismo tipo que otros objetos ya definidos.
ENTRE %TYPE y  %TYPE declara una variable del mismo tipo que otra, o
%ROWTYPE que una columna de una tabla.

 %ROWTYPE se usa para declara un registro


EJEMPLO
DISPARADORES (trigger)
 Son eventos que se ejecutan cuando se cumplen
¿Qué es un condiciones determinadas, al hacer un insert, update o
Trigger? delete y se ejecutan automáticamente.
 Cuando los datos de una tabla son generados desde
otro tipo de procesos y es necesario que se controlen
sus valores, para evitar que algunos campos tomen
valores concretos.
 Para duplicar los contenidos de una tabla
automáticamente y en tiempo real.
 Para implementar restricciones sobre valores que
pueden tomar ciertos campos de la tabla.
Usos  Incrementar automáticamente los valores de un campo.
 Para controlar las modificaciones de los valores de los
campos.
 Para realizar actualizaciones de una tabla en cascada.
 Para modificar campos o registros en una tabla que un
usuario no puede modificar directamente.
CREATE OR REPLACE TRIGGER
[BEFORE INSERT
AFTER INSERT
BEFORE UPDATE
AFTER UPDATE
BEFORE DELETE
AFTER DELETE]
ON TABLE <NOMBRE_TABLA> FOR EACH ROW
SINTAXIS DECLARE
-- VARIABLES
BEGIN
-- CODIGO
EXCEPTION
-- MANEJO DE EXCEPTION
END;

After => después


Before => antes
EJEMPLO
 En programación, una excepción es la indicación de un
problema que ocurre durante la ejecución de un
programa. Sin embargo, la palabra excepción se refiere
a que este problema ocurre con poca frecuencia
generalmente cuando existe algún dato o instrucción
que no se apega al funcionamiento del programa por lo
¿Qué es que se produce un error.

una Excepciones
?
 Los errores que se producen durante la ejecución de un
bloque de código PL/SQL pueden ser manejados a
gusto del programador, es decir, si durante la ejecución
de una sentencia PLSQL se produce un error, podemos
hacer que el programa realice unas acciones u otras
dependiendo del tipo de error que se haya generado

Excepciones en
Oracle
Ejemplo
 Para el manejo de excepciones, se incluye otra
sección(opcional) llamada: Sección de excepciones.
 Esta sección comienza con la palabra clave
EXCEPTION.

 Si está presente, esta debe ser la última sección del


bloque PL/SQL.
Manejo de
Excepciones
EJEMPLO
Excepción Descripción Instrucciones de Manejo

Errores Predefinidos de Errores que ocurren con No hay necesidad de


Oracle. frecuencia en PL/SQL. declarar esta excepciones.
Son predefinidas por
Oracle y se levantan de
forma implicita.

Errores No-Predefinidos de Cualquier otro error Es necesario declararlos


Oracle. estándar del servidor de dentro de la parte
Tipos de Oracle. declarativa; el servidor
Oracle levanta el error de

Excepciones forma implícita, y luego


puedes capturarlo en el
controlador de
excepciones.

Errores definidos por condición que el Deben ser declarados y


el usuario. programador entiende levantados de forma
como anormal. explicita.
Sintaxis
Número de Error
Excepción Descripción
en Oracle
Intento de asignar valores a los
ACCESS_INTO_NULL ORA-06530
atributos de un objeto no inicializado.
No se selecciona ninguna de las
opciones en las cláusulas WHEN de
CASE_NOT_FOUND ORA-06592
una sentencia CASE, y no hay una
cláusulaELSE.
Intentado de aplicar un método
diferente de EXISTS a
Algunas COLLECTION_IS_NULL ORA-06531
una colección(Nested Table,VARRAY)
no inicializada.
Excepciones CURSOR_ALREADY_OPEN ORA-06511 Intento de abrir un Cursor ya abierto.

Predefinidas de DUP_VAL_ON_INDEX ORA-00001 Intento de insertar un valor duplicado.


Se produjo una operación inválida con
Oracle. INVALID_CURSOR ORA-01001
un Cursor.
Conversión de carácter a numero
INVALID_NUMBER ORA-01722
fallida.
Intento de iniciar sesión en el servidor
LOGIN_DENIED ORA-01017 de Oracle con un nombre de usuario o
contraseña no válidos.
NO_DATA_FOUND ORA-01403 Sentencia SELECT no retorna
datos.
NOT_LOGGED_ON ORA-01012 El programa PL/SQL emite una
llamada de Base de Datos sin estar
conectado al servidor de Oracle.
PROGRAM_ERROR ORA-06501 PL/SQL tiene un problema interno.
ROWTYPE_MISMATCH ORA-06504 La variable host cursor y
la variable PL/SQL envueltas en
una asignación tienen tipos
incompatibles.
STORAGE_ERROR ORA-06500 PL/SQL sin memoria o la memoria
está dañada.
SUBSCRIPT_BEYOND_COUNT ORA-06533 Referencia a un elemento de
un Nested
Table o VARRAY mediante el uso
de un índice mayor que el número
de elementos de la colección.
SUBSCRIPT_OUTSIDE_LIMIT ORA-06532 Referencia a un elemento de
un Nested
Table o VARRAY mediante el uso
de un índice que está fuera del
rango legal (Ejemplo: –1).
SYS_INVALID_ROWID ORA-01410 La conversión de una cadena de
caracteres a ROWID universal falla
porque la cadena de caracteres no
representa un ROWID válido.
TIMEOUT_ON_RESOURCE ORA-00051 Se Agotó el tiempo de
espera(Time-Out) mientras el
Servidor Oracle esperaba por un
recurso.
TOO_MANY_ROWS ORA-01422 Sentencia SELECT retorna mas de
una fila.
VALUE_ERROR ORA-06502 Se produjo un error: aritmético, de
conversión, de truncamiento o
de restricción de tamaño.
ZERO_DIVIDE ORA-01476 Se ha intentado dividir por cero.
 Las excepciones predefinidas son similares a las No-
Predefinidas; sin embargo, estas ultimas no son
definidas como excepciones PL/SQL en el servidor
Oracle. Mas bien son errores estándar de Oracle y para
manejarlos es necesario crear excepciones y asociarlas
con dichos errores mediante el uso de la función de
Capturando PRAGMA EXCEPTION_INIT.
Errores No-
Predefinidos de
Oracle.
Ejemplo
 PL/SQL permite definir sus propias excepciones
dependiendo de los requerimientos de su aplicación.
Por ejemplo, puede pedir al usuario que introduzca un
número de departamento, luego definir una excepción
para manejar condiciones de error en los datos de
entrada, comprobar si tal número de departamento
Excepciones existe, y si no, es posible que tenga que levantar la
excepción definida por el usuario.
Definidas por el  Las excepciones definidas por el usuario deben ser:

Usuario  Declaradas en la parte declarativa del bloque.


 Levantadas explícitamente con la sentencia RAISE.
 Manejadas en la sección EXCEPTION.
 Crear una función que realice la raíz cuadrada y se
debe de personalizar el error, si el valor, es menor de
EJEMPLO cero el retorno debe ser null.
Ejemplo
 Crear un procedimiento almacenado para insertar
datos en la tabla (emp).
 Controlar las excepciones donde:
EJERCICIO  1: enviar error, en el caso no es posible realizar el
comando insert.
 2: si se ha realizado el insert correctamente debe de
mostrar el mensaje de éxito.
SQL DINÁMICO
 SQL Dinámico es una metodología de programación
que genera y ejecuta sentencias SQL en tiempo de
ejecución. Es útil cuando se escriben programas
flexibles y de propósito general como sistemas que
¿Qué es SQL usan Consultas Ad-Hoc (Ad-Hoc Queries), cuando se
Dinámico? escriben programas que deben ejecutar instrucciones
DDL o cuando en tiempo de compilación no se sabe el
texto completo de una instrucción SQL o el número o
tipos de datos de sus variables de entrada/salida.
SINTAX
EJEMPLO
RESUMEN

También podría gustarte