examen prÁctico primer parcialutilizando comandos dml, disparando instrucciones utilizando los...

28
Prof. Sergio López Gutiérrez Universidad Tecnológica De Nezahualcóyotl Organismo Público Descentralizado del Gobierno del Estado de México TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS BASE DE DATOS II Procedimientos Almacenados PL/SQL Cuando termines esta lección tendrás la capacidad para realizar las siguientes tareas: Identificar un procedimiento Crear un procedimiento Distinguir entre parámetros actuales y formales Enumerar las características de los diferentes modos de parámetros Crear procedimientos con parámetros Llamar a un procedimiento Manejar excepciones con procedimientos Eliminar un procedimiento De forma general aprenderás a crear, ejecutar y eliminar procedimientos. ¿Qué es un procedimiento? Es un tipo de subprograma que ejecuta o realiza una acción, el cual puede ser almacenado como un objeto de la base de datos para ejecutarse repetidamente. Un procedimiento es un bloque PL/SQL con nombre el cual puede aceptar y enviar parámetros (referidos también como argumentos). En términos generales un procedimiento sirve para ejecutar acciones además de manejar una excepción de forma opcional. Los procedimientos propician la reusabilidad y el mantenimiento, una vez validados pueden ser usados en una gran variedad de aplicaciones. Si los requerimientos cambian el procedimiento, este solo tiene que ser actualizado.

Upload: others

Post on 23-Jun-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Procedimientos Almacenados PL/SQL

Cuando termines esta lección tendrás la capacidad para realizar las siguientes tareas:

Identificar un procedimiento Crear un procedimiento Distinguir entre parámetros actuales y formales Enumerar las características de los diferentes modos de parámetros Crear procedimientos con parámetros Llamar a un procedimiento Manejar excepciones con procedimientos Eliminar un procedimiento

De forma general aprenderás a crear, ejecutar y eliminar procedimientos. ¿Qué es un procedimiento? Es un tipo de subprograma que ejecuta o realiza una acción, el cual puede ser almacenado como un objeto de la base de datos para ejecutarse repetidamente. Un procedimiento es un bloque PL/SQL con nombre el cual puede aceptar y enviar parámetros (referidos también como argumentos). En términos generales un procedimiento sirve para ejecutar acciones además de manejar una excepción de forma opcional. Los procedimientos propician la reusabilidad y el mantenimiento, una vez validados pueden ser usados en una gran variedad de aplicaciones. Si los requerimientos cambian el procedimiento, este solo tiene que ser actualizado.

Page 2: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Parámetros Formales y Actuales

Los parámetros formales son variables que son declaradas en la especificación de la lista de parámetros de un subprograma como se ve en el ejemplo anterior (notar que va seguido del tipo de dato). El procedimiento raise_sal del ejemplo anterior, posee las variables numéricas p_id y p_amount las cuales son parámetros formales. Los parámetros actuales son variables o especificaciones que son referenciadas como lista de parámetros en una llamada a un subprograma. Por ejemplo en la llamada raise_sal(v_id, 20000) los parámetros actuales son v_id y 20000.

Los parámetros actuales son evaluados y su resultado es asignado a los parámetros formales durante la llamada a un subprograma.

Los parámetros actuales pueden ser expresiones como las siguientes: raise_sal(v_id, rise+1000).

Es un buen hábito dar nombres específicos a los parámetros actuales y formales, por ejemplo en este curso los parámetros formales tendrán el prefijo p_.

Page 3: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

En una llamada a un procedimiento es necesario que tanto los parámetros actuales

como formales posean el mismo tipo de datos, para evitar errores en tipo de ejecución.

Formas de procesar parámetros Las siguientes son tres formas para transferir valores durante la llamada a un procedimiento, los tipos de datos que se utilicen pueden ser %TYPE, %ROWTYPE, o un tipo de dato explicito.

IN (parámetros), es el método predeterminado OUT (parámetros) IN OUT (parámetros)

Page 4: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Crear procedimientos con parámetros IN OUT IN OUT Método predeterminado o por omisión

Debe ser especificado Debe ser especificado

Los valores son transferidos hacia los subprogramas.

Regresa llamadas de ambiente Transfiere valores a un subprograma y también regresa llamadas de ambiente

Los parámetros formales actúan como constantes

Variables no inicializadas Variables inicializadas

Los parámetros actuales pueden ser literales, expresiones, constantes o variables inicializadas

Debe ser una variable Debe ser una variable

Pueden asignar valores predeterminados

No pueden asignar valores predeterminados

No pueden asignar valores predeterminados

Predeterminadamente los parámetros IN son pasados por referencia, mientras que OUT e IN OUT son pasados por valor.

Page 5: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Ejemplo con parámetros IN

Como se aprecia, el valor que entrará (IN) al procedimiento será un número de empleado, al cual se le modificará el salario que actualmente tiene asignado en la base de datos. Como ya sabemos creamos nuestro script.sql hasta que no tenga errores, posteriormente lo invocamos con un valor de entrada [IN] para modificar a un usuario dado. En caso de tratarse de parámetros formales la sintaxis: EXECUTE raise_salary(176); Para los parámetros actuales necesitamos llamar al procedimiento desde otro procedimiento: raise_salary(176);

Page 6: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Ejemplo con parámetros OUT

Para este ejemplo crearemos un procedimiento con el parámetro OUT para recuperar información acerca de un empleado. El procedimiento acepta el identificador del usuario igual a 171 y recupera nombre, salario y porcentaje de la comisión como se muestra en los tres parámetros de salida. Veamos el código que crea dicho procedimiento:

Visualizar valores utilizando el parámetro OUT mediante iSQL*Plus

1. Guardar nuestro script en un archivo.sql, depurándolo hasta que no tenga errores. 2. Crear las variables de host necesarias en iSQL*plus las cuales mostrarán los campos que

se quieren mostrar en pantalla:

Page 7: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

SQL>VARIABLE g_name varchar2(25); SQL>VARIABLE g_sal number; SQL>VARIABLE g_comm number;

3. Invocar al procedimiento creado query_emp, colocando las variables de host como

argumentos del parámetro OUT. Nota: debemos utilizar dos puntos (:) para referenciar a las variables de host cuando utilicemos el comando EXECUTE.

EXECUTE query_emp(171, :g_name, :g_sal, :g_comm); 4. Para visualizar los valores pasando desde el procedimiento hacia el sistema, usamos el

comando PRINT: PRINT g_name g_sal g_comm

Nota: pasar una constante o una expresión en forma de parámetro actual a través de la variable OUT puede causar errores de compilación. Por ejemplo: EXECUTE query_emp(171, :g_name, raise+1000, :g_comm);

Page 8: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Creating Database Triggers Una vez completado este capitulo el alumno podrá:

Describir los diferentes tipos de triggers Describir los triggers de base de datos y su uso Crear Triggers de base de datos Describir las reglas para arrancar un Trigger Eliminar Triggers.

Tipos de Triggers Aplication Triggers: estos se ejecutan en cualquier momento que ocurra un evento dentro de una aplicación mediante el uso y manipulación del lenguaje (DML). Una aplicación que usa extensivamente este tipo de triggers es Forms Developer de Oracle. Database Triggers: se ejecutan de forma implícita sobre una tabla cuando uno de los siguientes eventos ocurre:

Utilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete.

Utilizando el comando INSTEAD OF se ejecuta sobre una vista. Utilizando comandos DDL (Create y Alter), no importa qué usuario esté conectado o

cuál aplicación se esté usando. Cuando alguna acción de un usuario o de la base de datos del sistema ocurre. Por

ejemplo, cuando un usuario entra (log on) a la BD o cuando el DBA la detiene (Shut down database).

Nota: los database triggers, pueden ser definidos en tablas o en vistas. Cuando una operación DML es lanzada sobre una vista el tirgger INSTEAD OF definirá que acciones tomarán lugar. Si las

Page 9: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

acciones incluyen operaciones DML sobre tablas, entonces cualquier trigger será ejecutado sobre las tablas base. Los database triggers pueden ser triggers de sistema en una BD o en un esquema, en caso de tratarse de triggers de base de datos afectan a eventos que ejecutan todos los usuarios y si son de esquema solo a eventos que un usuario en específico ejecuta. Para este curso solo trataremos los database triggers. Directrices para diseñar Triggers

Los triggeres se diseñan para Ejecutar acciones recurrentes Centralizar operaciones globales

Los trigers no se diseñan si: Una funcionalidad ya esta implementada en el servidor de Oracle. Existe otro Trigger igual.

Crear procedimientos almacenados e invocarlos desde un trigger, en caso de que el código sea muy extenso.

Un uso excesivo de los triggers crea complejas interdependencias lo cual dificulta el mantenimiento en aplicaciones grandes.

Ejemplo de Database Trigger

Page 10: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

En este ejemplo el Trigger CHECK_SAL, verifica los valores del salario en la tabla Employees, cada vez que se quiera ejecutar alguna inserción, los valores que se encuentran fuera del rango de cada categoría de empleo serán rechazados o pueden ser permitidos pero serán grabados en la tabla de auditoria. Creando Triggers utilizando instrucciones DML, los cuales deben contener:

Una instrucción DML para registrar a un Trigger Para una tabla: BEFORE, AFTER Para una Vista: INSTEAD OF

Instrucciones Insert, Update y Delete; para cronometrar los eventos. El nombre de la tabla o de la vista El tipo de trigger, de fila o de instrucción La cláusula de restricción WHEN. Cuerpo del Trigger

Database Trigger Antes de codificar el cuerpo de un Trigger, debemos establecer los valores de sus componentes, el tiempo o ejecución del trigger, el evento o situación de disparo y el tipo de trigger.

Page 11: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Parte o componente Descripción Posibles valores Registro de un trigger o sincronización Trigger Timing

Cuando se lanza o se activa un trigger en relación a un evento

BEFORRE AFTER INSTEAD OF

Evento de ejecución Triggering Event

Cuando una operación de manipulación de datos, sobre una tabla o vista ocasiona que un trigger sea lanzado.

INSERT UPDATE DELETE

Tipo de Trigger Trigger Type

Cuantas veces se ejecuta el cuerpo de un Trigger?

Statement Trigger ROW Trigger

Cuerpo del trigger Trigger Body

Qué acciones realizará el trigger.

Bloque completo PL/SQL

Tener cuidado cuando se definan múltiples Triggers sobre una tabla ya que el orden en que se ejecutan es arbitrario. Para asegurar el orden de ejecución de Triggers del mismo tipo deberemos crear un trigger el cual se encargará de llamar a un conjunto de Triggers de forma ordenada. Componentes DML de un Trigger Trigger timming: Cuando se debe lanzar un trigger?

BEFORE Triggers: Ejecutar el cuerpo del trigger antes de que se accione un evento DML sobre una tabla. Este tipo de trigger es frecuentemente usado en las siguientes situaciones:

Para determinar si alguna instrucción debería ser permitida completamente. Esta acción te permite eliminar procesos innecesarios de lanzamiento de triggers y su eventual rollback en caso de que por omisión o innecesariamente se halla lanzado.

Para determinar valores de columna antes de que se ejecute completamente una instrucción de Inserción (INSERT) o actualización (UPDATE).

Page 12: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Para inicializar variables globales o banderas y para validar complejas regalas

de negocio. AFTER Triggers: ejecutar el cuerpo del trigger después de una instrucción DML sobre

una tabla. Este tipo de trigger es frecuentemente usado en las siguientes situaciones: Para completar el lanzamiento de una instrucción antes de que sea ejecutado

por una acción disparadora. Para ejecutar diferentes acciones en las mismas instrucciones de lanzamiento si

el BEFFORE trigger aún esta corriendo. INSTEAD OF Trigger: ejecutar el cuerpo del trigger en lugar de una instrucción de

lanzamiento. Se utiliza en vistas que de otro modo no podrían modificarse, debido a que una vista no se puede modificar o no es conveniente, utilizando instrucciones DML.

Componentes DML de un trigger Disparando eventos de usuario: Cuál instrucción DML provoca que un trigger se ejecute?. Podemos utilizar lo siguiente: INSERT, UPDATE y DELETE. Evento Disparador Un evento o instrucción disparadora puede ser una instrucción INSERT, UPDATE o DELETE sobre una tabla. Cuando un evento disparador se ejecuta a partir de una instrucción UPDATE, se puede incluir una lista de columnas para identificar en cual de ellas se ejecutará alguna modificación.

…………UPDATE OF Salary…………………. En caso de utilizar las instrucciones INSERT o DELETE no es necesario especificar la lista de columnas ya que la modificación se realiza sobre la fila completa, esto es, tomando como base la llave(s) primaria(s) de una o varias tablas.

…………INSERT or UPDATE OF Job_id………………….

Page 13: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Statement trigger y Row trigger Trigger type: El cuerpo del trigger debería ejecutarse para cada fila, o la instrucción se debería ejecutar una sola vez.

Statement trigger: El cuerpo del trigger se ejecuta una sola vez por cada evento disparador. Esta es la opción predeterminada. La instrucción disparadora se ejecuta una sola vez, incluso si no todas las filas son afectadas. Este tipo de trigger es muy útil si la acción disparadora no depende de los datos de cada fila, por ejemplo un trigger que verifica el acceso de un usuario.

Row trigger: el cuerpo del trigger se ejecuta una vez por cada fila, este tipo de trigger no se ejecuta si no encuentra una fila sobre la que se realice alguna modificación. Este tipo de trigger es muy útil si la acción disparadora depende de los datos de cada fila.

Trigger Body: es un bloque PL/SQL o una llamada a procedimiento. En esta sección se definen las acciones que se realizarán cuando un evento disparador es lanzado. Un bloque PL/SQL contiene instrucciones PL/SQL y SQL y se pueden definir constructores como variables, cursores, excepciones, entre otros. Desde aquí podemos realizar llamadas a procedimientos y funciones de PL/SQL y/o Java. Adicionalmente los row triggers usan nombres de correlación para acceder a los nuevos (new) y viejos (old) valores de columna los cuales pueden ser procesados por el Trigger. Nota: El tamaño de un trigger no debe exceder de 32 k.

Page 14: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Disparando una Secuencia Utilice la siguiente instrucción disparadora para un trigger sobre una tabla. Cuando una sola fila es manipulada: Creando “Statement Trigers” o “Row Triger” Dependiendo si se afecta a una sola fila o a un conjunto de ellas, será el tipo de trigger que utilicemos. Cuando la manipulación de una instrucción afecta a una sola fila, tanto el stantment trigger como el row trigger se ejecuta una sola vez. Ejemplo: La instrucción anterior no diferencia entre un stantment trigger y un row trigger porque solo una fila es insertada en la tabla con esta sintaxis. Disparando una Secuencia (Continua) Ahora utilicemos una instrucción que afecte a mas de una fila, el código disparador se ejecutará una sola vez salvo que ahora lo hará por cada fila.

Insert into departments (department_id, department_name, location_id)

Values (400, CONSULTING, 2400);

Page 15: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

El ejemplo anterior se ejecutará tantas veces como encuentre empleados que laboren en el departamento 30. Sintaxis general para la creación de un DML Statement Triggers

Nota: el nombre de un trigger debe ser único con respecto de otro existente en el mismo esquema.

Trigger Name Nombre del trigger. Timing Indica el tiempo de ejecución de un trigger con

relación a la ejecución de un evento. BEFORE o AFTER

Event Identifica la operación que manipula los datos,

Page 16: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

lo que propicia que el trigger se encienda. INSERT, UPDATE [OF Column], DELETE

Table / view_name Indica la tabla o vista asociada con el trigger Trigger body Se refiere al cuerpo del trigger que define la

acción a ejecutar. Inicia con DECLARE o BEGIN y termina con END.

Recordar que se debe utilizar el nombre de columna frente a la cláusula UPDATE para evitar que otras columnas se modifiquen accidentalmente. Creando Statement Triggers con instrucciones DML. Ejemplo:

Se decidió crear un Trigger con la instrucción BEFORE INSERT para prevenir que una acción no debida sucediera, para el caso anterior no se permite insertar registros sobre la tabla EMPLOYEES fuera del horario de trabajo. En caso de no se saber el formato de fechas que nuestro manejador esta utilizando podemos realizar la siguiente consulta para determinar que días de la semana quiero que se impida la captura de registros:

Page 17: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

SQL> select (TO_CHAR (SYSDATE, 'DY')) from dual;

Probando la ejecución del trigger Tratemos de insertar un registro fuera del horario establecido para probar la funcionalidad de nuestro bloque. INSERT INTO TABLE EMPLOYEES VALUES

(207,'Sergio','Lopez','serchlg2004_2','59377687','16/Jan/2000','SH_CLER

K',6000,0.10,101,10) Al momento de insertar el registro nos envía los siguientes mensajes, los cuales pueden ser tanto personalizados por el programador como arrojados por el propio DBMS de Oracle: ORA-20500: Solo se permite insertar sobre la tabla EMPLOYEE en horario de trabajo ORA-06512: at "HR.SECURE_INSERT", line 4 ORA-04088: error during execution of trigger 'HR.SECURE_INSERT' Notar que la instrucción RAISE_APPLICATION_ERROR se refiere a un procedimiento propio de Oracle que nos devuelve un error y las causas por las que el trigger no pudo ejecutarse, dejando a la base de datos en un estado consistente. Utilizando predicados condicionales Podemos realizar la combinación de varios tipos de triggers en un mismo bloque de código, aprovechando las ventajas que ofrecen los predicados INSERT, UPDATE y DELETE. En el siguiente ejemplo se aprecia como se restringen las acciones de borrado, inserción y actualización sobre la tabla de empleado, en días y horas no hábiles.

Page 18: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Analizando el código podemos apreciar que existen tres situaciones de error de captura, en donde si queremos borrar, insertar o actualizar se lanzarán las excepciones (1), (2) y (3) respectivamente, en otro caso, si se desea realizar alguna otra modificación no considerada se ejecutará predeterminadamente la opción (4). Sintaxis general para la creación de Row Triggers Sintaxis general

Trigger Name Nombre del trigger. Timing Indica el tiempo de ejecución de un trigger con

relación a la ejecución de un evento. BEFORE,

Page 19: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

AFTER o INSTEAD OF Event Identifica la operación que manipula los datos,

lo que propicia que el trigger se encienda. INSERT, UPDATE [OF Column], DELETE

Table_name Indica la tabla el trigger REFERENCING Especifica una correlación de nombres, para los

valores anteriores y actuales de un registro específico. Los valores predeterminados son OLD y NEW.

FOR EACH ROW Indica que se trata de un ROW trigger WHEN Especifica una restricción del trigger (Este

predicado condicional puede estar encerrado entre paréntesis y es evaluado en cada fila para determinar si el trigger se ejecuta o no )

Trigger body Se refiere al cuerpo del trigger que define la acción a ejecutar. Inicia con DECLARE o BEGIN y termina con END, o puede contener también una llamada a procedimiento.

Page 20: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Creando un DML ROW trigger

Se puede crear un ROW trigger con el registro del tiempo en BEFORE, para impedir el lanzamiento de una instrucción si es que una condición es violada. En el ejemplo anterior se creará un trigger para permitir que solo ciertos empleados puedan ganar mas de 15000, en caso de que se presente una situación contraria el disparador lanzará un error. Para realizar el ejemplo anterior verificar primero que las actualizaciones se puedan llevar a cabo (1,2), después vuelva a dejar los valores como estaban (3), finalmente ejecute el trigger (4) y verifique que realmente no se pueden ejecutar las acciones que se restringen (5):

ANTES DEL TRIGGER 1) select EMPLOYEE_ID, FIRST_NAME, JOB_ID, SALARY

from employees

where last_name='Russell'

145 John SA_MAN 14000.00 2)antes del trigger si se pueden realizar actualizaciones

update EMPLOYEES

set salary=15500.00

where last_name='Russell'

1 row updated

145 John SA_MAN 15500.00 3)update EMPLOYEEs

set salary=14000.00

Page 21: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

where last_name='Russell'

145 John SA_MAN 14000.00 CREANDO EL TRIGGER 4) CREATE OR REPLACE TRIGGER Validar_salario

BEFORE INSERT OR UPDATE OF salary ON employees

FOR EACH ROW

BEGIN

IF NOT (:NEW.job_id IN ('AD_PRES','AD_VP'))

AND :NEW.salary>15000

THEN

RAISE_APPLICATION_ERROR(-20202, 'Este tipo de

empleado no puede ganar mas de 15000');

END IF;

END;

DESPUES DEL TRIGGER 5)update EMPLOYEES

set salary=15500.00

where last_name='Russell'

ORA-20202: Este tipo de empleado no puede ganar mas de la cantidad

que se indica

ORA-06512: at "HR.VALIDAR_SALARIO", line 5

ORA-04088: error during execution of trigger 'HR.VALIDAR_SALARIO'

Usando los calificadores OLD y NEW.

Page 22: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Solo dentro de un ROW trigger podemos usar los nombres de las columnas anteponiendo los calificadores OLD y NEW para realizar cambios antes y después de algún evento. Veamos en seguida como realizar este proceso con las instrucciones DML siguientes:

Operaciones DML Old Values New Values INSERT NULL Valores a insertar o insertados

UPDATE Valores antes de la actualización

Valores después de la actualización

DELETE Valores antes del borrado NULL o los datos eliminados

Los identificadores OLD y NEW solo están disponibles para los ROW Triggers En instrucciones SQL y PL/SQL debemos anteponer dos puntos (:) en los

identificadores. No colocar la referencia de dos puntos en los identificadores cuando utilicemos la

instrucción condicional WHEN. Nota: Los ROW Triggers pueden demeritar el desempeño de la base de datos si estos se ejecutan sobre tablas muy grandes.

Page 23: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Restringiendo un Row Triggers En el siguiente código podemos apreciar el uso de la cláusula WHEN para restringir la acción de un trigger cada vez que se quiera insertar o actualizar un nuevo registro sobre la tabla empleados. En este caso el job_id = a ‘SA_REP’ deberá tener una comisión de 0 cuando se trate de una nueva inserción y en caso de que ya se tenga un valor asignado se le asignará 0.05.

INSTEAD OF TRIGGERS Como se había comentado anteriormente este tipo de triggers se ejecutan sobre vistas ya que directamente sobre ellas no se pueden realizar actualizaciones, veamos la siguiente ilustración.

Page 24: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

En la ilustración anterior se puede apreciar que las acciones que se intentan sobre la vista (insert, update o delete) no se podrán hacer, para ello se despertará el trigger que afectará a las tablas de las que depende la vista, dichas acciones se ejecutarán en background por lo que un usuario convencional no se dará cuenta, sin embargo nuestra BD se mantendrá consistente. Sintaxis general para la creación de un Instead Of Trigger Sintaxis general

Trigger Name Nombre del trigger. INSTEAD OF Indica que el trigger se ejecutará sobre una

vista. Las opciones BEFORE y AFTER no son válidas en este tipo de trigger

Event Identifica la operación que manipula los datos, lo que propicia que el trigger se encienda. INSERT UPDATE [OF Column] DELETE

View_name Indica la vista asociada con el trigger REFERENCING Especifica una correlación de nombres, para los

valores anteriores y actuales de un registro específico. Los valores predeterminados son OLD y NEW.

FOR EACH ROW Indica que se trata de un ROW trigger, de igual

Page 25: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

forma un INSTEAD OF trigger es un row trigger. Trigger body Se refiere al cuerpo del trigger que define la

acción a ejecutar. Inicia con DECLARE o BEGIN y termina con END, o puede contener también una llamada a procedimiento.

Realizar la práctica 2 de este parcial para reforzar los conocimientos adquiridos. Administrando triggers:

1) Habilita o deshabilita un trigger de base de datos.

2) Habilita o deshabilita un trigger de una tabla

3) Recompila un trigger de una tabla

4) Borrar un trigger

Page 26: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Creating Functions Una vez completado este capitulo el alumno podrá:

Describir los usos de las Funciones Crear Funciones almacenadas Llamar o invocar a una Función Eliminar una Función Distinguir entre un procedimientos y Funciones

Qué son las funciones almacenadas Una función es un bloque PL/SQL con nombre, la cual puede ser invocada, recibir

parámetros y regresar un valor. Generalmente una función se utiliza para calcular valores. Una función es muy semejante a un procedimiento, ambas poseen un encabezado, una sección declarativa, una sección ejecutable y una sección opcional para el manejo de excepciones. La diferencia es que la función posee la instrucción RETURN en el encabezado y al final de la sección ejecutable.

Una función se puede almacenar en una BD como un objeto de algún esquema, posteriormente se puede utilizar de forma repetida.

Una función es llamada como parte, o desde una expresión SQL y/o PL/SQL. En una expresión SQL, una función obedece reglas específicas para controlar efectos secundarios. En expresiones PL/SQL, un identificador [nombre de la función] actúa como una variable cuyo valor dependerá de los parámetros que se le pasen.

Page 27: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Sintaxis de una Función

Parámetro Descripción CREATE FUNCTION Crear una nueva función

OR REPLACE Permite realizar una nueva versión de la función en caso de que esta exista.

Function_name Nombre de la función Parameters Nombres de variables PL/SQL cuyo valor es pasado hacia la función

Mode El tipo de acceso del parámetro, solo se pueden declararse parámetros de tipo IN

Datatype Tipo de dato de los parámetros RETURN datatype Tipo de dato que la función regresara

IS | AS Especificación de subprograma, es obligatoria en procedimientos y funciones. Se coloca antes del BEGIN, no se utiliza en bloques anónimos.

Bloque PL/SQL Cuerpo de la función donde se definen las acciones a realizar por la función.

BEGIN Todo bloque PL/SQL inicia con esta instrucción END o END function_name

Fin de bloque PL/SQL

Pasos para crear una FUNCION

Page 28: EXAMEN PRÁCTICO PRIMER PARCIALUtilizando comandos DML, disparando instrucciones utilizando los comandos Insert, Update y Delete. Utilizando el comando INSTEAD OF se ejecuta sobre

Prof. Sergio López Gutiérrez

U n i v e r s i d a d T e c n o l ó g i c a D e N e z a h u a l c ó y o t l Organismo Público Descentralizado del Gobierno del Estado de México

TECNOLOGIAS DE LA INFORMACIÓN Y COMUNICACIÓN AREA DE APLICACIÓN DE SISTEMAS INFORMÁTICOS

BASE DE DATOS II

Como crear una función almacenada

Introducir el código precedido por la instrucción CREATE FUNCTION en algún editor SQL y guardarlo con la extensión .sql

Desde el editor cargar y ejecutar el script que contiene el código almacenado, el cual se compilara generando el código P.

Usar SHOW ERRORS para ver los errores que pudiera contener el código. Una vez compilado nuestro código, la función esta lista para ejecutarse. Finalmente invocarla desde un ambiente SQL.