Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 1
_________________________________________________________________________
_______________________
Programación en Base de Datos Oracle
PROGRAMACIÓN PL/SQL V
Semana 13
OBJETIVO DEL LABORATORIO
Construye programas avanzados utilizando el lenguaje PL/SQL elaborando disparadores en beneficio a la lógica del
negocio.
MARCO TEÓRICO
El lenguaje utilizado para acceder a las bases de datos relacionales es el llamado Lenguaje Estructurado de Consulta (SQL,
Structured Query Language), que es muy flexible y transparente, es decir, sencillo y poderoso. SQL es un lenguaje de cuarta
generación, lo cual quiere decir que describe lo que quiere hacerse. Ayudará de manera factible al estudiante a relacionar el
mundo real con las bases de datos a desarrollar usando programación orientado a negocio.
PL / SQL es un lenguaje de procedimiento diseñado específicamente para incluir declaraciones SQL dentro de su sintaxis. Las
unidades de programa PL / SQL son compiladas por el servidor de Oracle Database y almacenadas dentro de la base de datos. Y
en tiempo de ejecución, tanto PL / SQL como SQL se ejecutan dentro del mismo proceso del servidor, brindando una eficiencia
óptima. PL / SQL hereda automáticamente la solidez, seguridad y portabilidad de la base de datos Oracle.
RECURSOS
Hardware
Sistema. Oracle en Windows requiere un PC Intel x86, AMD64 o Intel EM64T
Memoria. Al menos 1 GB de RAM y el doble en virtual.
Espacio en disco duro. Al menos 6 GB para la instalación (algunas instalaciones requieren menos). Además, necesitamos
poder almacenar 500 MB en la carpeta TEMP del sistema.
Tarjeta gráfica. Debe de ser capaz de mostrar 1024 por 768 píxeles como mínimo y 256 colores.
Software
Sistema Operativo.
Windows 2003 Server y 2003 Server R2.
Windows XP Professional.
Windows Vista, pero no la versión Home Edition.
Windows Server 2008 y 2012. No la versión Server Core.
Compiladores. Se usan para la gente que crean aplicaciones en Oracle usando lenguajes como Pro C, Pro COBOL,
JAVA.
o Visual C++.NET 2005 8.0 o Intel 10.1 C, .Net Express.
Navegador. Para configurar algunos servicios de Oracle. Debe de ser navegador moderno (Internet Explorer 6 o
superior, Firefox 2.0 o superior, Safari 3.1 o superior, Chrome 3.0 o superior)
Usar dirección IP única en la máquina en la que se instala Oracle. Es decir, no usar DHCP para direccionar la IP en el
servidor de Oracle. No es un requisito obligatorio, pero es muy recomendable.
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 2
_________________________________________________________________________
_______________________
DESCARGAR EL ARCHIVO Semana16_PL_SQL_1.sql,
ESTE SCRIPT CONTIENE LA ESTRUCTURA DE TABLAS DEL MODELO RELACIONAL.
¿Qué es un disparador o Trigger?
Un trigger es un bloque PL/SQL asociado a una tabla, que se ejecuta como consecuencia de una determinada instrucción SQL
(una operación DML: INSERT, UPDATE o DELETE) sobre dicha tabla.
La sintaxis para crear un trigger es la siguiente:
El uso de OR REPLACE permite sobre escribir un trigger existente. Si se omite, y el trigger existe, se producirá, un error de
existencia.
Los triggers pueden definirse para las operaciones INSERT, UPDATE o DELETE, y pueden ejecutarse antes o después de la
operación. El modificador BEFORE AFTER indica que el trigger se ejecutará antes o después de ejecutarse la sentencia SQL
definida por DELETE INSERT UPDATE. Si incluimos el modificador OF el trigger solo se ejecutará cuando la sentencia SQL
afecte a los campos incluidos en la lista.
El alcance de los disparadores puede ser la fila o de orden. El modificador FOR EACH ROW indica que el trigger se disparará
cada vez que se realizan operaciones sobre una fila de la tabla. Si se acompaña del modificador WHEN, se establece una
restricción; el trigger solo actuará, sobre las filas que satisfagan la restricción.
La siguiente tabla resume los contenidos anteriores.
Valor Descripción
INSERT, DELETE, Define qué tipo de orden DML provoca la activación del disparador.
UPDATE
BEFORE , AFTER Define si el disparador se activa antes o después de que se ejecute la orden.
FOR EACH ROW Los disparadores con nivel de fila se activan una vez por cada fila afectada por la orden que
provocó el disparo. Los disparadores con nivel de orden se activan sólo una vez, antes o
después de la orden. Los disparadores con nivel de fila se identifican por la cláusula FOR
EACH ROW en la definición del disparador.
La cláusula WHEN sólo es válida para los disparadores con nivel de fila.
Dentro del ámbito de un trigger disponemos de las variables OLD y NEW. Estas variables se utilizan del mismo modo que
cualquier otra variable PL/SQL, con la salvedad de que no es necesario declararlas, son de tipo %ROWTYPE y contienen una
copia del registro antes (OLD) y después(NEW) de la acción SQL (INSERT, UPDATE, DELETE) que ha ejecutado el trigger.
Utilizando esta variable podemos acceder a los datos que se están insertando, actualizando o borrando.
Orden de ejecución de los triggers
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 3
_________________________________________________________________________
_______________________
Una misma tabla puede tener varios triggers. En tal caso es necesario conocer el orden en el que se van a ejecutar.
Los disparadores se activan al ejecutarse la sentencia SQL.
Si existe, se ejecuta el disparador de tipo BEFORE (disparador previo) con nivel de orden.
para cada fila a la que afecte la orden:
o Se ejecuta si existe, el disparador de tipo BEFORE con nivel de fila.
o Se ejecuta la propia orden.
o Se ejecuta si existe, el disparador de tipo AFTER (disparador posterior) con nivel de fila.
o Se ejecuta, si existe, el disparador de tipo AFTER con nivel de orden.
Restricciones de los triggers.
El cuerpo de un trigger es un bloque PL/SQL. Cualquier orden que sea legal en un bloque PL/SQL, es legal en el cuerpo de un
disparador, con las siguientes restricciones:
Un disparador no puede emitir ninguna orden de control de transacciones: COMMIT, ROLLBACK o SAVEPOINT. El
disparador se activa como parte de la ejecución de la orden que provocó el disparo, y forma parte de la misma transacción que
dicha orden. Cuando la orden que provoca el disparo es confirmada o cancelada, se confirma o cancela también el trabajo
realizado por el disparador.
Por razones idénticas, ningún procedimiento o función llamado por el disparador puede emitir órdenes de control de
transacciones.
El cuerpo del disparador no puede contener ninguna declaración de variables LONG o LONG RAW.
Utilización de :OLD y :NEW
Dentro del ámbito de un trigger disponemos de las variables OLD y NEW. Estas variables se utilizan del mismo modo que
cualquier otra variable PL/SQL, con la salvedad de que no es necesario declararlas, son de tipo %ROWTYPE y contienen una
copia del registro antes (OLD) y después(NEW) de la acción SQL (INSERT, UPDATE, DELETE) que ha ejecutado el trigger.
Utilizando esta variable podemos acceder a los datos que se están insertando, actualizando o borrando.
La siguiente tabla muestra los valores de OLD y NEW.
ACCION SQL OLD NEW
INSERT No definido; todos los campos toman valor Valores que serán insertados cuando se
NULL. complete la orden.
UPDATE Valores originales de la fila, antes de la Nuevos valores que serán escritos cuando se
actualización. complete la orden.
DELETE Valores, antes del borrado de la fila. No definidos; todos los campos toman el valor
NULL.
o Los registros OLD y NEW son sólo válidos dentro de los disparadores con nivel de fila.
o Podemos usar OLD y NEW como cualquier otra variable PL/SQL.
Utilización de predicados de los triggers: INSERTING, UPDATING y DELETING.
Dentro de un disparador en el que se disparan distintos tipos de órdenes DML (INSERT, UPDATE y DELETE), hay tres
funciones booleanas que pueden emplearse para determinar de qué operación se trata. Estos predicados son INSERTING,
UPDATING y DELETING.
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 4
_________________________________________________________________________
_______________________
Su comportamiento es el siguiente:
Predicado Comportamiento
INSERTING TRUE si la orden de disparo es INSERT; FALSE en otro caso.
UPDATING TRUE si la orden de disparo es UPDATE; FALSE en otro caso.
DELETING TRUE si la orden de disparo es DELETE; FALSE en otro caso.
ALGUNAS CONSULTAS SQL PARA MODIFICAR EL ESTADO DE UN TRIGGER
Para eliminar un trigger mediante SQL:
Drop Trigger <Nombre del Trigger>;
Para deshabilitar temporalmente un trigger (dejará de realizar su función):
Alter Trigger <Nombre del Trigger> Disable;
Para habilitar un trigger deshabilitado:
Alter Trigger < Nombre del Trigger > Enable;
Para deshabilitar todos los triggers asociados a una tabla:
Alter Table <Nombre Tabla> Disable All Triggers;
Para habilitar todos los triggers asociados a una tabla:
Alter Table <Nombre Tabla> Enable All Triggers;
Ejemplo 1:
Se tiene el siguiente modelo relacional:
Se pide registrar productos (TABLA: PRODUCTO), y después de cada almacenamiento realizar mediante un disparador con
una copia de los mismos (TABLA: LISTA_PRODUCTO
SOLUCION:
PASO 1:
Crear el disparador de copia y que se ejecute después de insertar en la tabla PRODUCTO.
CREATE OR REPLACE TRIGGER DUPLICAR
AFTER INSERT ON PRODUCTO
FOR EACH ROW
DECLARE
IDP VARCHAR2 (5);
BEGIN
INSERT INTO LISTA_PRODUCTO (IDPRODUCTO, NOMBRE)
VALUES (:NEW.IDPRODUCTO, :NEW.NOMBRE);
END;
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 5
_________________________________________________________________________
_______________________
PASO 2:
Probar el disparador DUPLICAR, insertando algunos registros en la tabla PRODUCTO, cada registro debe usar la
confirmación COMMIT, esto quiere decir que cada fila es grabada físicamente sobre la tabla.
INSERT INTO PRODUCTO VALUES ('P0001', 3,'PLAY STATION 4', 1800.99,
10,'ACTIVO');
COMMIT;
INSERT INTO PRODUCTO VALUES ('P0002', 1,'TV. LED 32P SMART', 999.99,
10,'ACTIVO');
COMMIT;
INSERT INTO PRODUCTO VALUES ('P0003', 1,'COCINA A GAS 3 HORNILLAS',
800.99, 10,'ACTIVO');
COMMIT;
INSERT INTO PRODUCTO VALUES ('P0004', 3,'PLAY STATION 3', 1200.99,
10,'ACTIVO');
COMMIT;
INSERT INTO PRODUCTO VALUES ('P0005', 2,'REFRIGERADOR 14P3 FROZEN',
1499.99, 10,'ACTIVO');
COMMIT;
PASO 3:
Comprobando la inserción de productos, mediante las presentes consultas.
SELECT * FROM PRODUCTO;
Comprobando los datos de la copia, gracias al disparador. Realice la siguiente consulta:
SELECT * FROM LISTA_PRODUCTO;
El disparador tiene efecto desde la tabla PRODUCTO realizando una copia de datos en la tabla LISTA_PRODUCTO.
FIN DE EJEMPLO1.
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 6
_________________________________________________________________________
_______________________
EJEMPLO 2:
Una librería almacena los datos de sus libros en una tabla denominada "LIBROS" y controla las actualizaciones del precio de
los libros almacenando en la tabla "CONTROL": el nombre del usuario, la fecha, el precio anterior y el nuevo, para ello se
cuenta con las siguientes tablas.
PASO 1:
A continuación llenaremos de datos a la tabla LIBROS.
Insert into Libros Values(100,'Uno','Richard Bach','Planeta', 25);
Insert into Libros Values(103,'El aleph','Borges','Emece', 28);
Insert into Libros Values(105,'Matematica estas ahi','Paenza','Nuevo
siglo', 12);
Insert into Libros Values(120,'Aprenda PHP','Molina Mario','Nuevo
siglo',55);
Insert into Libros Values(145,'Alicia en el pais de las maravillas',
'Carroll','Planeta',35);
Commit;
PASO 2:
Verificando la información almacenada en la tabla Libros.
SELECT * FROM LIBROS;
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 7
_________________________________________________________________________
_______________________
PASO 3:
Ahora creamos un trigger a nivel de fila que se dispara "antes" que se ejecute un "Update" sobre el campo "precio" de la tabla
"LIBROS". En el cuerpo del disparador se debe registrar en la tabla "CONTROL", el nombre del usuario que realizó la
actualización, la fecha, el código del libro que ha sido modificado, el precio anterior y el nuevo:
Create or Replace trigger tr_actualizar_precio_libros
Before Update of precio On libros
For Each Row
Begin
INSERT INTO CONTROL VALUES (USER, SYSDATE, :NEW.CODIGO,
:OLD.PRECIO, :NEW.PRECIO);
End tr_actualizar_precio_libros;
Cuando el trigger se dispare, antes de ingresar los valores a la tabla, almacenará en "CONTROL", además del nombre del
usuario y la fecha, el precio anterior del libro y el nuevo valor.
PASO 4:
Probando el disparador. Para ello actualizaremos el precio del libro cuyo código es 100, el nuevo valor del precio será 30.
--Actualizamos el precio del libro con código 100:
Update libros set precio=30 Where codigo=100;
Commit;
PASO 5:
Veamos lo que se almacenó en la tabla "CONTROL" al dispararse el trigger, realice esta consulta.
SELECT * FROM CONTROL;
Los campos "PRECIOANTERIOR" y "PRECIONUEVO" de la tabla "CONTROL" almacenaron los valores de
":old.precio" y ":new.precio" respectivamente.
FIN DEL EJEMPLO 2
Ejemplo 3:
Creamos un disparador para múltiples eventos, que se dispare al ejecutar "Insert", "Update" y "Delete" sobre "Libros". En el
cuerpo del trigger se realiza la siguiente acción: se almacena el nombre del usuario, la fecha y los antiguos y viejos valores de
"precio":
SOLUCION:
PASO 1:
Crearemos el disparador con los tres eventos,
CREATE OR REPLACE TRIGGER tr_libros
BEFORE INSERT OR UPDATE OR DELETE ON Libros
For Each Row
Begin
INSERT INTO CONTROL VALUES (USER, SYSDATE, :OLD.CODIGO, :OLD.PRECIO,
:NEW.PRECIO);
End tr_libros;
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 8
_________________________________________________________________________
_______________________
PASO 2:
Probando el Disparador de inserción
Insert Into Libros Values (150,'El gato con botas', 'Anónimo',
'Emece',21);
PASO 3:
Verificando los resultados en ambas tablas.
SELECT * FROM LIBROS;
SELECT * FROM CONTROL;
La sentencia disparadora fue una inserción, por lo tanto, los campos ":old.codigo" y ":old.precio" contienen "null", así que en
"codigo" y en "PRECIOANTERIOR" se almacena "null"; el único campo con valor diferente de "null" es "PRECIONUEVO"
correspondiente al valor de ":new.precio".
PASO 4:
Probando el Disparador de Actualización
UPDATE LIBROS SET PRECIO=12 WHERE CODIGO=103;
COMMIT;
PASO 5:
Verificando los resultados en ambas tablas.
SELECT * FROM LIBROS;
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 9
_________________________________________________________________________
_______________________
SELECT * FROM CONTROL;
PASO 6:
Probando el disparador de Eliminación.
DELETE FROM LIBROS WHERE CODIGO=100;
COMMIT;
PASO 7:
Verificando los resultados en ambas tablas:
SELECT * FROM LIBROS;
SELECT * FROM CONTROL;
FIN DEL EJEMPLO 3
Ejemplo 4:
Se tiene el siguiente modelo de Base de Datos, se pide crear 3 triggers (Inserción, Actualización y Eliminación), los cuales
permitan almacenar en la tabla LEGENDA, los valores equivalentes al de la tabla LIBROS, cuyos estados serán, según la
acción: “INSERTADO”, “ACTUALIZADO” y “ELIMINADO”.
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 10
_________________________________________________________________________
_______________________
SOLUCION:
PASO 1:
Creando el disparador de inserción.
--DISPARADOR DE INSERCION DE LIBRO
CREATE OR REPLACE TRIGGER T1
BEFORE INSERT ON LIBRO
FOR EACH ROW
BEGIN
INSERT INTO LEGENDA VALUES (:NEW.IDLIB, :NEW.TITULO, :NEW.PRECIO,
'INSERCION');
END;
PASO 2:
Creando el disparador de actualización.
--DISPARADOR DE ACTUALIZACION DE LIBRO.
CREATE OR REPLACE TRIGGER T2
BEFORE UPDATE ON LIBRO
FOR EACH ROW
BEGIN
INSERT INTO LEGENDA VALUES (:NEW.IDLIB, :NEW.TITULO, :NEW.PRECIO,
'ACTUALIZACION');
END;
PASO 3:
Creando el disparador de eliminación.
--DIPARADOR DE ELIMINACION DE LIBRO.
CREATE OR REPLACE TRIGGER T3
AFTER DELETE ON LIBRO
FOR EACH ROW
BEGIN
INSERT INTO LEGENDA VALUES (:OLD.IDLIB, :OLD.TITULO, :OLD.PRECIO,
'ELIMINACION');
END;
AHORA PROBAREMOS LOS DISPARADORES CREADOS.
PASO 4:
Prueba de inserción.
--PRUEBA DE INSERCION.
INSERT INTO LIBRO VALUES (1, 'EL MIO CID', 150, 10);
COMMIT;
Comprobando la Inserción en ambas tablas.
SELECT * FROM LIBRO;
SELECT * FROM LEGENDA;
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 11
_________________________________________________________________________
_______________________
PASO 5:
Prueba de Actualización.
--PRUEBA DE ACTUALIZACION.
UPDATE LIBRO SET PRECIO=10, STOCK=0 WHERE IDLIB=1;
COMMIT;
Comprobando la Actualización en ambas tablas.
SELECT * FROM LIBRO;
SELECT * FROM LEGENDA;
PASO 6:
Prueba de Eliminación.
--PRUEBA DE ELIMINACION
DELETE FROM LIBRO WHERE IDLIB=1;
COMMIT;
Comprobando la Eliminación, en ambas tablas.
SELECT * FROM LIBRO;
SELECT * FROM LEGENDA;
FIN DEL EJEMPLO 4.
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 12
_________________________________________________________________________
_______________________
Ejemplo 5:
Se tiene el siguiente modelo relacional:
Este modelo relacional consiste en registrar a clientes (CLIENTE) con sus respectivos prestamos (CREDITO y
REGISTRAR_CUOTAS), implementar un disparador el cual sea capaz de almacenar las cuotas mensuales
(REGISTRAR_CUOTAS) de un determinado crédito.
Las condiciones son las siguientes:
Registrar solo 3 Clientes
Registre solo un crédito, con el primer cliente, con los siguientes elementos
o Monto de 5000 soles.
o Se pagará en 5 cuotas mensuales
o Se aplicará a cada cuota el 5% adicional
SOLUCIÓN:
PASO 1:
Insertamos registros en la tabla cliente:
INSERT INTO CLIENTE VALUES ('C0001','PEREZ GONZALES JUAN','05/05/2019');
INSERT INTO CLIENTE VALUES ('C0002','CESPEDES LOPEZ ELIZABETH', '10/05/2019');
INSERT INTO CLIENTE VALUES ('C0003','FERNANDEZ CARRION JULIA','08/09/2019');
COMMIT;
PASO 2:
Creamos el disparador (REGISTRO) para la tabla CREDITO, que permitirá registrar las mensualidades en la tabla
REGISTRAR_CUOTA, después (AFTER) de generar el crédito, según el número de cuotas establecidas.
CREATE OR REPLACE TRIGGER REGISTRO
AFTER INSERT ON CREDITO
FOR EACH ROW
DECLARE
CONTEO INT:=0;
NUEVA_FECHA DATE;
COSTO_CUOTA NUMBER (10, 2):=0;
BEGIN
COSTO_CUOTA:=(:NEW.MONTO / :NEW.C_CUOTAS) +
((:NEW.MONTO / :NEW.C_CUOTAS) * 0.05);
FOR CONTEO IN 1..:NEW.C_CUOTAS LOOP
NUEVA_FECHA:= add_months(:NEW.F_REGISTRO,CONTEO);
INSERT INTO REGISTRAR_CUOTAS VALUES (CONTEO, :NEW.IDCREDITO,
CONTEO, COSTO_CUOTA, NUEVA_FECHA, NULL, NULL, NULL);
END LOOP;
END;
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 13
_________________________________________________________________________
_______________________
PASO 3:
Insertaremos un solo registro en la tabla CREDITO, este contendrá los datos necesarios para generar las mensualidades en la
tabla REGISTRAR_CUOTAS.
INSERT INTO CREDITO VALUES ('00001','C0001', 1000.00, 5, SYSDATE);
COMMIT;
PASO 4:
Comprobamos las inserciones en las tablas: CREDITO y REGISTRAR_CUOTAS con simples consultas.
Aquí se registró el crédito de 1000 soles en 5 cuotas, en fecha 30/08/2019.
SELECT * FROM CREDITO;
Aquí se han registrado con ayuda del disparador, las mensualidades del primer cliente.
SELECT * FROM REGISTRAR_CUOTAS;
FIN DEL EJEMPLO 5.
Tablas mutantes
Una tabla mutante es una tabla que está modificándose actualmente por una orden DML. Para un disparador, ésta es la tabla
sobre la que está definido.
Las órdenes SQL, en el cuerpo de un disparador, no pueden leer o modificar ninguna tabla mutante de la orden que provoca el
disparo. Esto incluye a la propia tabla del disparador. A continuación se muestra un ejemplo:
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 14
_________________________________________________________________________
_______________________
Ejemplo 6:
SE TIENE LA SIGUIENTE TABLA:
CREAR LA TABLA EMPLEADOS.
CREATE TABLE EMPLEADOS (
IDEMPLEADO INT NOT NULL,
NOMBRE VARCHAR2(50) NOT NULL,
SUELDO NUMBER(10, 2) NOT NULL,
SEXO VARCHAR2(20) NOT NULL,
ESTADO VARCHAR2(20) NOT NULL,
PRIMARY KEY (IDEMPLEADO));
INGRESAR LOS SIGUIENTES REGISTROS EN LA TABLA EMPLEADOS.
INSERT INTO EMPLEADOS VALUES (1,'JUAN PEREZ', 2000, 'MASCULINO', 'ACTIVO');
INSERT INTO EMPLEADOS VALUES (2,'ELENA SANCHEZ', 1600,'FEMENINO','ACTIVO');
INSERT INTO EMPLEADOS VALUES (3,'CARMEN SALAS', 2500, 'FEMENINO','ACTIVO');
INSERT INTO EMPLEADOS VALUES (4,'CARLOS PONTE', 2000, 'MASCULINO','ACTIVO');
INSERT INTO EMPLEADOS VALUES (5,'JULIA RODAS', 2000, 'FEMENINO','ACTIVO');
COMMIT;
COMPROBANDO LA INSERCION DE REGISTROS EN LA TABLA EMPLEADOS.
SELECT * FROM EMPLEADOS;
AHORA CREAREMOS EL TRIGGER MUTANTE.
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 15
_________________________________________________________________________
_______________________
Si observa el código del disparador, que se crea está orientado a la tabla EMPLEADOS, pero al mismo tiempo en el cuerpo del
disparador se usa la misma tabla EMPLEADOS para obtener el conteo de empleados. A esto se le llama tabla mutante, es decir
la tabla EMPLEADOS está mutando, lamentablemente esto es un error que el programador no debe realizar. No olvide que
pasaría lo mismo si aplicara un comando: UPDATE o DELETE.
PROBANDO EL DISPARADOR MUTANTE, INSERTE EL SIGUENTE REGISTRO.
--PROBANDO EL DISPARADOR, VOLVIENDO A INGRESAR REGISTROS
INSERT INTO EMPLEADOS VALUES (6,'LUIS ALCANTARA', 2000, 'MASCULINO', 'ACTIVO');
COMMIT;
AL EJECUTAR ESTA INSERCIÓN, SE OBSERVARÁ EL SIGUIENTE ERROR,
FIN DEL EJEMPLO 6.
CONCLUSIONES Y RECOMENDACIONES DE LA EXPERIENCIA
La codificación PL/SQL de Oracle es tan amplia, que ofrece a los estudiantes una alta gama de alternativas para la resolución de
problemas en disparadores, combinados con procedimientos y funciones, no difíciles de entender, con la prioridad de manejar
los datos con suma responsabilidad por el programador Oracle.
El alumno estará preparado para la evaluación continua correspondiente.
Guía de Laboratorio
Programación en Base de Datos Oracle – Programación PL/SQL V 16
_________________________________________________________________________
_______________________
ACTIVIDAD VIRTUAL
Ingresa a la plataforma virtual, revisa y analiza el tema desarrollado en la esta sesión luego desarrolla la actividad propuesta:
SE TIENE EL SIGUIENTE MODELO RELACIONAL:
IMPORTANTE
DESARROLLAR LA ACTIVIDAD VIRTUAL EN EL ARCHIVO VACIO
S16_PL_SQL_2.sql,
FAVOR DE DESCARGAR DICHO ARCHIVO Y SOLUCIONAR LOS CASOS, LUEGO SUBIRLO COMO
PRESENTACION DE LA ACTIVIDAD.
De acuerdo al material presentado Semana 16, Responda a las siguientes Preguntas:
RESOLVER:
Crear las siguientes funciones en PL/SQL.
1. Se pide obtener una copia del registro que se elimine en la tabla PRODUCTO, y este ser depositado en la tabla
LISTA_PRODUCTO, apenas este sea eliminado.
2. Si un Producto es Modificado, los datos antiguos deben pasar como copia a la tabla LISTA_PRODUCTO.
3. Si se inserta un nuevo producto, se debe pasar una copia a la tabla LISTA_PRODUCTO.