Práctica 3: El lenguaje SQL (2ª parte). Definici ón de datos Práctica 1. Introducci ón al uso de una BD relacional (ACCESS). Práctica 2. Representaci ón de la realidad en el modelo relacional de datos. Práctica 3. El lenguaje SQL. (ORACLE9) Práctica 4. Estudio del SGBD ORACLE9. Programa de prácticas: El lenguaje SQL. • estudio del lenguaje de definici ón de datos del SQL. • definir una base de datos relacional en el sistema ORACLE9. • estudio del mecanismo de disparadores (triggers) en el sistema ORACLE9. Objetivos (2ª parte): El lenguaje SQL. Lenguaje SQL: ü manipulación de datos • SELECT (consulta) • INSERT (inserción de tuplas) • DELETE (borrado de tuplas) • UPDATE (modificación de tuplas) ü definición de datos cod_pro nombre teléfono categor í a cod_dep Profesor cod_dep nombre director teléfono Departamento cod_asg nombre semestre teo prac cod_dep Asignatura cod_pro cod_asg gteo gprac Docencia Clave primaria Clave Ajena El lenguaje SQL. Departamento (cod_dep: tira(5), nombre: tira(100), director tira(50), teléfono : tira(11)) CP={cod_dep}, VNN={nombre} Asignatura (cod_asg: tira(5), nombre: tira(100), semestre: tira(2), teo: real, prac: real, cod_dep: tira(5)) CP={cod_asg}, VNN={nombre, teo, prac, semestre} CAj={cod_dep} →Departamento f(cod_dep)=cod_dep Profesor (cod_pro : tira(5), nombre: tira(50), teléfono: tira(11), categoría: tira(3), cod_dep: tira(5) ) CP={cod_pro}, VNN={nombre, categoría} CAj={cod_dep} → Departamento f(cod_dep)=cod_dep Docencia ( cod_asg: tira(3), cod_pro: tira(3), gteo: entero, gprac: entero) CP={cod_pro, cod_asg}, VNN={gteo, gprac} CAj={cod_asg} → Asignatura f(cod_asg)=cod_asg CAj={cod_pro} → Profesor f(cod_pro)=cod_pro El lenguaje SQL.
13
Embed
Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
Práctica 3:
El lenguaje SQL (2ª parte).Definición de datos
Práctica 1. Introducci ón al uso de una BD relacional (ACCESS).
Práctica 2. Representaci ón de la realidad en el modelo relacional de datos.
Práctica 3. El lenguaje SQL. (ORACLE9)
Práctica 4. Estudio del SGBD ORACLE9.
Programa de prácticas:
El lenguaje SQL.
• estudio del lenguaje de definici ón de datos del SQL.
• definir una base de datos relacional en el sistema ORACLE9.
• estudio del mecanismo de disparadores (triggers) en el sistema ORACLE9.
Objetivos (2ª parte):
El lenguaje SQL.
Lenguaje SQL:
ü manipulación de datos
• SELECT (consulta)
• INSERT (inserción de tuplas)
• DELETE (borrado de tuplas)
• UPDATE (modificación de tuplas)
ü definición de datos
cod_pro
nombre
teléfono
categoría
cod_dep
Profesor
cod_dep
nombre
director
teléfono
Departamento
cod_asg
nombre
semestre
teo
prac
cod_dep
Asignatura
cod_pro
cod_asg
gteo
gprac
Docencia
Clave primaria Clave Ajena
El lenguaje SQL.
Departamento (cod_dep: tira(5), nombre: tira(100), director tira(50),teléfono : tira(11))
Nota:La sem ántica de cada una de las versiones de la cl áusula cuando_comprobar es la siguiente: - si no se utiliza esta cláusula la restricci ón se define como no diferible y con modo inmediato. - la versión DEFERRABLE INITIALLY IMMEDIATE (resp. DEFERRED) define una restricci ón como diferible y con modo por defecto inmediato (resp. diferido). - la versi ón NOT DEFERRABLE INITIALLY IMMEDIATE coincide con los valores por defecto.- la versi ón NOT DEFERRABLE INITIALLY DEFERRED está prohibida. - la versi ón DEFERRABLE (resp. NOT DEFERABLE) define una restricci ón como diferible (resp. no diferible) y con modo por defecto inmediato.- la versión INITIALLY IMMEDIATE define una restricción como no diferible y con modo inmediato.- la versi ón INITIALLY DEFERRED define una restricci ón como diferible y con modo por defecto diferido.
•La instrucción SQL que permite cambiar, localmente en una transacción, el modo de una restricción definida como diferible, es:
SET CONSTRAINT {comalista_nombre_restricción | ALL}{IMMEDIATE | DEFERRED}.
•Cada restricción especificada en la lista debe ser diferible y la opción ALL hace referencia a todas las restricciones diferibles del esquema de la base de datos.•El alcance del cambio producido por la instrucción SET CONSTRAINT es la transacción en la que se incluye o el fragmento de transacción hasta la siguiente aparición de la misma instrucción.•Si se incluye la instrucción en medio de la transacción con la opción IMMEDIATE, las restricciones afectadas por la instrucción son comprobadas cuando se ejecuta ésta, si alguna de estas restricciones falla, la instrucción SET falla y el modo de las restricciones permanece sin modificar.
El lenguaje SQL.
4
Modificación de relaciones
modificación_relación::= ALTER TABLE nombre_relación
4 ADD permite añadir nuevos atributos o restricciones a una relaci ón.4 MODIFY permite modificar la definición de los atributos.4 ENABLE (resp. DISABLE) permite activar (resp. desactivar) una restricci ón de
integridad. Con la opci ón VALIDATE (opción por defecto), el sistema se asegura que al activar una restricción los datos almacenados en la base de datos en el momento de la activación satisfacen la restricción.
4 DROP permite borrar atributos o restricciones de integridad. 4 CASCADE borra en cascada cualquier restricción de integridad definida en el
esquema que dependa del elemento que se acaba de borrar.
Definición de vistasdefinición_vista::=
CREATE VIEW nombre_vista [(comalista_nombre_atributo)] AS sentencia_SELECT[WITH CHECK OPTION]
borrado_vista::= DROP VIEW nombre_vista {RESTRICT | CASCADE}
[(nom_atributo1, nom_atributo2, …)] AS sentencia_SELECT[WITH CHECK OPTION]
El lenguaje SQL en ORACLE: Definición de vistas
4 Restricciones de las actualizaciones sobre vistas en Oracle 9:– Una vista definida por una SELECT que
contiene operadores conjuntistas (UNION, INTERSECT,…), el operador DISTINCT, funciones agregadas (SUM, AVG, …) o la cláusula GROUP BY no es actualizable.
– Si la vista está definida sobre una única relaci ón básica el sistema traducirá la actualización sobre la vista en una operación de actualización sobre la relaci ón básica siempre que no se viole ninguna restricci ón de integridad definida sobre dicha relación.
El lenguaje SQL en ORACLE: Definición de vistas
4 Restricciones de las actualizaciones sobre vistas en Oracle 9:– Si la vista está definida sobre una concatenación
de relaciones, la actualizaci ón está sometida a las siguientes restricciones adicionales:
• La actualización sólo puede modificar una de las relaciones básicas.
• La actualización modificará la relación básica que cumpla la propiedad de conservación de la clave, es decir aquella relación tal que su clave primaria podr ía ser también clave de la vista si sus atributos fuesen seleccionados por la SELECT que define la vista.
• La actualización no se realizará si viola alguna de las restricciones definidas sobre la relación básica que se va a actualizar.
ON objeto TO {PUBLIC | comalista_usuario}{RESTRICT | CASCADE}
Definición de privilegios de acceso en SQL
El lenguaje SQL.
Objetoes una relación o una vista del esquema.
El lenguaje SQL en ORACLE: Definición de privilegios
definición_operación_grant ::= GRANT privilegio_sistema1, privilegio_sistema2,…
ON objetoTO {PUBLIC | usuario1, usuario2, …}[WITH ADMIN OPTION]
4 usuario es el identificador de un usuario.4 Con la cláusula PUBLIC se transmiten los privilegios
a todos los usuarios.4 La cl áusula WITH ADMIN OPTION concede permiso
para ceder a terceros los privilegios obtenidos.
cod_pro
nombre
teléfono
categoría
cod_dep
Profesor
cod_dep
nombre
director
teléfono
Departamento
cod_asg
nombre
semestre
teo
prac
cod_dep
Asignatura
cod_pro
cod_asg
gteo
gprac
Docencia
clave primaria Clave ajena
El lenguaje SQL. El lenguaje SQL.
Restricciones de integridad (adicionales):• los créditos deben ser valores reales positivos
•los grupos de clase deben ser enteros positivos
• las categor ías de un profesor son: TEU, TU, CEU y CU
• un profesor con categor ía TEU no puede dar mas de 33 créditos y un profesor con categor ía TU no puede dar mas de 22 créditos.
• todo profesor debe estar adscrito a un departamento
• toda asignatura debe estar adscrita a un departamento
• el director de un departamento debe ser un profesor y sólo se puede ser director de un departamento
•las directrices de mantenimiento de la integridad referencial son:
–clave ajena director en Departamento: borrado a nulos, actualización en cascada
–clave ajena cod_dep en Profesor : borrado restrictivo, actualización en cascada
–clave ajena cod_dep en Asignatura: borrado restrictivo, actualización en cascada
–clave ajena cod_pro en Docencia: borrado en cascada, actualización en cascada
–clave ajena cod_asg en Docencia: borrado restrictivo, actualización en cascada
El lenguaje SQL. CREATE SCHEMA Docencia-UPV
CREATE TABLE Departamento( cod_dep CHAR(5),
nombre VARCHAR(100) NOT NULL,director VARCHAR(50),teléfono CHAR(11),CONSTRAINT CP_dpto PRIMARY KEY (cod_dep) )
CREATE TABLE Profesor( cod_pro CHAR(5),
nombre VARCHAR(50) NOT NULL,teléfono CHAR(11),categoría CHAR(3) NOT NULLcod_dep CHAR(5),CONSTRAINT CP_prof PRIMARY KEY (cod_pro),CONSTRAINT CAj_prof_dpto FOREIGN KEY (cod_dep)
REFERENCES Departamento (cod_dep) )
El lenguaje SQL.
VERSIÓN 1
6
CREATE TABLE Asignatura( cod_asg CHAR(5),
nombre VARCHAR(100) NOT NULL,semestre CHAR(2) NOT NULL,teo NUMBER(3,1) NOT NULL, prac NUMBER(3,1) NOT NULL,cod_dep CHAR(5) ,CONSTRAINT CP_asg PRIMARY KEY (cod_asg),CONSTRAINT CAj_asg_dpto FOREIGN KEY (cod_dep)
REFERENCES Departamento (cod_dep) )CREATE TABLE Docencia( cod_pro CHAR(5),
cod_asg CHAR(5),gteo INTEGER NOT NULL, gprac INTEGER NOT NULL,
nombre VARCHAR(50) NOT NULL,teléfono CHAR(11),categoría CHAR(3) NOT NULL
CHECK categoría IN (‘TEU’, ‘TU’, ‘CEU’, ‘CU’) cod_dep CHAR(5) NOT NULL,CONSTRAINT CP_prof PRIMARY KEY (cod_pro),CONSTRAINT CAj_prof_dpto FOREIGN KEY (cod_dep)
REFERENCES Departamento (cod_dep)ON UPDATE CASCADE )
El lenguaje SQL.
CREATE TABLE Asignatura( cod_asg CHAR(5),
nombre VARCHAR(100) NOT NULL,semestre CHAR(2) NOT NULL,teo créditos NOT NULL,prac créditos NOT NULL,cod_dep CHAR(5) NOT NULL,CONSTRAINT CP_asg PRIMARY KEY (cod_asg),CONSTRAINT CAj_asg_dpto FOREIGN KEY (cod_dep)
REFERENCES Departamento (cod_dep)ON UPDATE CASCADE )
El lenguaje SQL.
CREATE TABLE Docencia( cod_pro CHAR(5),
cod_asg CHAR(5),gteo grupos NOT NULL,gprac grupos NOT NULL,
El lenguaje SQL. Definición de un esquema externo en SQL (vistas).
El lenguaje SQL.
El lenguaje de definición de datos de ORACLE:Las principales diferencias respecto al estándar SQL son:
üno contempla el concepto de esquema de base de datos
üno permite la definición de dominios
üsólo contempla el tipo de integridad referencial débil
üsólo admite directrices de restauración de la integridad referencial frente a la operación de borrado (ON DELETE)
ülas restricciones de integridad generales que se pueden definir con la cláusula CHECK son muy limitadas (no se pueden usar subconsultas, ni funciones agregadas, ....)
üno admite la sentencia CREATE ASSERTION.
Práctica 3:
El lenguaje SQL (2ª parte).
Disparadores
Práctica 1. Introducci ón al uso de una BD relacional (ACCESS).
Práctica 2. Representaci ón de la realidad en el modelo relacional de datos.
Práctica 3. El lenguaje SQL. (ORACLE9)
Práctica 4. Estudio del SGBD ORACLE9.
Programa de prácticas:
El lenguaje SQL.
• estudio del lenguaje de definici ón de datos del SQL.
• definir una base de datos relacional en el sistema ORACLE8.
• estudio del mecanismo de disparadores (triggers) en el sistema ORACLE9.
Objetivos (2ª parte):
cod_pro
nombre
teléfono
cod_dep
Profesor
cod_dep
nombre
director
teléfono
Departamento
cod_asg
nombre
semestre
teo
prac
cod_dep
Asignatura
cod_pro
cod_asg
gteo
gprac
Docencia
Clave primaria Clave Ajena
El lenguaje SQL.
8
Mecanismo de disparadores en ORACLE
evento - condición - acci ón
evento: especifica el suceso a cuya ocurrencia debe responder el sistema .
condición: especifica el contexto en el cual la regla cuyo evento se haproducido debe ser ejecutada.
acción: especifica las acciones que deben ser ejecutadas por el sistema como respuesta a la ocurrencia del evento cuando la condición es cierta .
Los disparadores permiten modelar un comportamiento activo (autónomo) del sistema como respuesta a la ocurrencia de sucesos.
regla de actividaddisparador ≡
Mecanismo de disparadores en ORACLE
Ejemplo1: “cuando un profesor se da de baja (es borrado) sus datos deben registrarse en un histórico de profesores”.
Después (AFTER) de un borrado en Profesor (evento) por cada tuplaborrada (FOR EACH ROW ) se insertará una tupla en Histórico-Profesores (acción) construida con los valores viejos (OLD) de la tuplaborrada.
cod_pro nombre teléfono cod_dep
JCC Juan C. Casamayor Ródenas 7796 DSIC
RFC Robert Fuster i Capilla 6789 MAT
JBD José V. Benlloch Dualde 5760 DISCA
MAF María Alpuente Frasnedo 3560 DSIC
CPG Cristina Pérez Guillot 7439 IDM
JTM José M. Torralba Martínez 4590 OEM
IGP Ignacio Gil Pechuán 3423 OEM
DGT Daniel Gil Tomás 5679 DISCA
MCG Matilde Celma Giménez 7756 DSIC
Profesor
DELETE FROM Profesor WHERE cod_pro=“RFC”
evento
OLD.cod_pro OLD.nombre OLD.teléfono OLD.cod_dep
Mecanismo de disparadores en ORACLE Mecanismo de disparadores en ORACLE
Parámetros del evento: campos de la tupla actualizada.
OLD.nombre_campo: valor antes de la actualización
NEW.nombre_campo: valor después de la actualización
INSERT: NEW.nombre_campo
DELETE: OLD .nombre_campo
UPDATE: OLD .nombre_campo, NEW.nombre_campo
Dependiendo del tipo de evento sólo tienen sentido un tipo de parámetros (NEW o OLD)
9
Mecanismo de disparadores en ORACLE
cod_pro nombre teléfono cod_dep
JCC Juan C. Casamayor Ródenas 7796 DSIC
RFC Robert Fuster i Capilla 6789 MAT
JBD José V. Benlloch Dualde 5760 DISCA
MAF María Alpuente Frasnedo 3560 DSIC
CPG Cristina Pérez Guillot 7439 IDM
JTM José M. Torralba Martínez 4590 OEM
IGP Ignacio Gil Pechuán 3423 OEM
DGT Daniel Gil Tomás 5679 DISCA
MCG Matilde Celma Giménez 7756 DSIC
Profesor
DELETE FROM Profesor WHERE cod_dep=“DSIC”
Hist órico-Profesor
JCC Juan C. Casamayor Ródenas 7796 DSIC 12/12/99
MAF María Alpuente Frasnedo 3560 DSIC 12/12/99
MCG Matilde Celma Giménez 7756 DSIC 12/12/99
INSERT INTO Histórico-Profesores
VALUES ( )
SGBD
Mecanismo de disparadores en ORACLE
Ejemplo2: “cuando se realiza una actualización en Profesor se debe hacer un registro de seguridad en la tabla Accesos”.
cod_pro
nombre
teléfono
cod_dep
Profesor
nro
usuario
fecha
Accesos
DELETE- UPDATE-INSERTINSERT
SGBD
acci ón
evento
Mecanismo de disparadores en ORACLE
CREATE OR REPLACE TRIGGER borrado_profesor
AFTER INSERT OR UPDATE OR DELETE ON Profesor
BEGIN
INSERT INTO Accesos
VALUES ( nro, USER, SYSDATE);
END;
Después (AFTER) de una operación (inserción, borrado o actualización) en Profesor (evento) se insertará una tupla en Accesos (acción) independientemente del numero de tuplas actualizadas.
Nota: USER y SYSDATE son funciones predefinidas que devuelven elidentificador del usuario conectado y la fecha del sistema.
FOR EACH ROW
Ejemplo 3:
Restricción de integridad: “Los profesores que imparten la asignatura “EST1” deben ser del departamento de Estadística (EST)”.
Mecanismo de disparadores en ORACLE
SQL
Restricción de integridad: Los profesores que imparten la asignatura “EST1” deben ser del departamento de Estadística (EST).
CREATE ASSERTION CHECK
( NOT EXISTS
(SELECT *
FROM Docencia NATURAL JOIN Profesor
WHERE Docencia.cod_asg = “EST1”
AND
Profesor.cod_dep <> ”EST” )
Mecanismo de disparadores en ORACLE
El lenguaje de definición de datos de ORACLE:Las principales diferencias respecto al estándar SQL son:
üno contempla el concepto de esquema de base de datos
üno permite la definición de dominios
üsólo contempla el tipo de integridad referencial débil
üsólo admite directrices de restauración de la integridad referencial frente a la operación de borrado (ON DELETE)
ülas restricciones de integridad generales que se pueden definir con la cláusula CHECK son muy limitadas (no se pueden usar subconsultas, ni funciones agregadas, ....)
üno admite la sentencia CREATE ASSERTION.
Mecanismo de disparadores en ORACLE
10
Restricción de integridad: Los profesores que imparten la asignatura “EST1” deben ser del departamento de Estadística (EST).
CREATE ASSERTION CHECK
( NOT EXISTS
(SELECT *
FROM Docencia NATURAL JOIN Profesor
WHERE Docencia.cod_asg = “EST1”
AND
Profesor.cod_dep <> ”EST” )
ORACLE
Mecanismo de disparadores en ORACLE
La restricción de integridad que no se puede definir en ORACLE puede ser comprobada por medio de disparadores.
Restricción de integridad: Los profesores que imparten la asignatura “EST1” deben ser del departamento de Estadística (EST).
Mecanismo de disparadores en ORACLE
Se deben analizar los eventos relevantes para la restricción, es decir que pueden violarla, y definir los disparadores necesarios.
Operaciones sobre la relación Docencia
Operaciones sobre la relación Profesor
DocenciaINSERT
si cod_dep de NEW.cod_pro <>”EST”
entonces RECHAZAR
UPDATE (cod_asg)
UPDATE (cod_pro)
Evento Condición Acción
REGLA DE ACTIVIDAD
Mecanismo de disparadores en ORACLE
NEW.cod_asg=EST1
Disparadores sobre Docencia:
Mecanismo de disparadores en ORACLE
CREATE OR REPLACE TRIGGER control_docencia1
AFTER INSERT OR UPDATE OF cod_asg, cod_pro ON Docencia
FOR EACH ROW
WHEN NEW.cod_asg = ‘EST1’
DECLARE X CHAR(4);
BEGIN
SELECT P.cod_dep INTO X FROM Profesor P WHERE P.cod-prof = : NEW.cod-prof;
IF X <> “EST” THEN RAISE-APPLICATION-ERROR ( ---, ‘actualización no válida’)
END IF;END
evento
condición acción
ORACLE
Profesor
si NEW.cod_profimparte EST1 entonces RECHAZAR
UPDATE (cod_dep)
Evento Condición Acción
REGLA DE ACTIVIDAD
Mecanismo de disparadores en ORACLE
OLD.cod_dep=EST
AND
NEW.cod_dep<>EST
Disparadores sobre Profesor:
Mecanismo de disparadores en ORACLE
CREATE OR REPLACE TRIGGER control_docencia2
AFTER UPDATE OF cod_dep ON Profesor
FOR EACH ROW
WHEN OLD.cod_dep = ‘EST’ AND NEW.cod_dep<>”EST”
DECLARE X INTEGER;
BEGIN
SELECT COUNT(*) INTO X FROM Docencia D WHERE D.cod-prof = :NEW.cod-prof AND D.cod_asg=“EST1”
IF X <> 0 THEN RAISE-APPLICATION-ERROR ( ---, ‘actualización no válida’)
END IF;END
evento
condición acción
ORACLE
11
Mecanismo de disparadores en ORACLE
Ejemplo4:”en la relación Profesor existe un atributo derivado créditos que debe ser mantenido automáticamente por el sistema”.
Ley de derivación del atributo créditos: “el valor del atributo créditos de Profesor es la suma de todos los créditos que en la relación Docencia aparecen impartidos por el profesor”
cod_pro
nombre
teléfono
cod_dep
créditos*
Profesor
cod_dep
nombre
director
teléfono
Departamento
cod_asg
nombre
semestre
teo
prac
cod_dep
Asignatura
cod_pro
cod_asg
créditos
Docencia
Clave primaria Clave Ajena
Mecanismo de disparadores en ORACLE
* atributo derivado
CREATE TABLE Profesor
(cod_pro CHAR(5),
nombre VARCHAR(50) NOT NULL,
teléfono CHAR(11),
cod_dep CHAR(5),
créditos NUMBER (4,1) DEFAULT 0,
CONSTRAINT CP_prof PRIMARY KEY (cod_pro),
CONSTRAINT CAj_prof_dpto FOREIGN KEY (cod_dep)
REFERENCES Departamento(cod_dep))
Mecanismo de disparadores en ORACLE
El atributo derivado créditos debe ser mantenido automáticamente por el sistema.
DocenciaINSERT
aplicar la ley de derivación del atributo créditos en Profesor y actualizar dicho atributo:
UPDATE (creditos)
DELETE
UPDATE (cod_pro)
Evento Condición Acción
REGLA DE ACTIVIDAD
UPDATE (creditos) Profesor
Mecanismo de disparadores en ORACLE
CREATE TRIGGER total_creditosAFTER INSERT OR DELETE OR UPDATE OF creditos, cod_pro ON DocenciaFOR EACH ROWBEGINIF INSERTING THEN
UPDATE Profesor SET créditos=cr éditos+:NEW.creditosWHERE cod_pro=:NEW.cod_pro;
ELSEIF UPDATING THENIF :NEW.cod_pro != :OLD.cod_prof THEN
UPDATE Profesor SET créditos=cr éditos+:NEW.creditosWHERE cod_pro=:NEW.cod_pro;
UPDATE Profesor SET créditos=cr éditos -:OLD.creditosWHERE cod_pro=:OLD.cod_pro;
ELSEUPDATE Profesor
SET créditos + :NEW.creditos - :OLD.creditos;WHERE cod_pro=:NEW.cod_pro;
END IF;ELSE
UPDATE Profesor SET creditos=creditos - :OLD.creditosWHERE cod_pro=:OLD.cod_pro;
Sólo los disparadores de tipo FOR EACH ROW pueden llevar condición.
Los disparadores de tipo INSTEAD OF sólo actúan sobre vistas.
12
Creación: CREATE TRIGGER nombre_regla ……..
Borrado: DROP TRIGGER nombre_regla
Modificaci ón: REPLACE TRIGGER nombre_regla
Recompilación: ALTER TRIGGER nombre_regla COMPILE
Consulta: consultas a las tablas del diccionario del sistema: USER_TRIGGERS, ALL_TRIGGERS, DBA_TRIGGERS
Prioridad entre reglas: no existe
Habilitar y deshabilitar reglas:
ALTER TRIGGER nombre_regla [ENABLE | DISABLE]
ALTER TABLE nombre_relación [{ENABLE | DISABLE} ALL TRIGGERS]
Mecanismo de disparadores en ORACLE
Tipos de reglas: 4 tipos de reglas
[FOR EACH STATEMENT] FOR EACH ROW
BEFORE
AFTER
se ejecuta la regla una vez antes de la ejecuci ón del evento
se ejecuta la regla una vez después de la ejecución del evento
se ejecuta la regla una vez antes de la actualizaci ón de cada tupla afectada por el evento
se ejecuta la regla una vez después de la actualización de cada tupla afectada por el evento
Mecanismo de disparadores en ORACLE
Mecanismo de disparadores en ORACLE
Anexo: Lenguaje PL/SQL de ORACLEEstructura de un bloque PL/SQL:
DECLARE
Sección de declaraci ón
de variables
BEGIN
Sentencias del bloque
END
Sección de declaraci ón de variables:
- Variables locales al bloque:
nombre_variable tipo_dato
tipo_dato::= {NUMBER | CHAR ( ) | DATE }
(las declaraciones de esta sección deben ir separadas por punto y coma)
Mecanismo de disparadores en ORACLE
Sentencias del cuerpo del bloque PL/SQL:- Secuencia_de_sentencias::= sentencia; [sentencia;] ...
- Sentencia de selección:
IF condición THEN secuencia_de_sentencias
[ELSE secuencia_de_sentencias] END IF;
- Sentencias de repetición:
WHILE condición LOOP
secuencia_de sentencias ;
END LOOP;
FOR contador IN mínimo .. máximo LOOP
secuencia_de_sentencias ;
END LOOP;
Mecanismo de disparadores en ORACLE
Sentencias del cuerpo del bloque PL/SQL:- Sentencia de asignaci ón :
nombre_variable := expresión
-Sentencias SQL:
INSERT, DELETE, UPDATE, SELECT... INTO.......
- Sentencias de entrada-salida: dbms_output.put_line ('mensaje'). Para usar esta función el paquete dbms_output debe estar activado, esto se hace con la sentencia SQL SET SERVEROUTPUT ON .
Mecanismo de disparadores en ORACLE
13
Manejo de errores:Si durante la ejecución de una regla (trigger) se produce un error predefinido en el sistema o definido por el usuario, entonces se anulan todas las actualizaciones realizadas por la acción de la regla así como el evento que la activó.
La sentencia RAISE_APPLICATION_ERROR (nro_error, ' mensaje' ) provoca la ocurrencia del error de número interno nro_error y envía al usuario el mensaje 'mensaje'. (nro_error debe ser un número negativo entre -20000 y -20999).
Mecanismo de disparadores en ORACLE
Se desea diseñar una base de datos para la gestión de una pequeña biblioteca de un departamento. Después de realizar el análisis del sistema, se han identificado los requerimientos que van a realizarse con más frecuencia; éstos son:
-consultar los datos de un libro: código del libro, título, autor(es), temática y en caso de estar prestado, el socio que lo tiene actualmente en préstamo.
-consultar la informaci ón sobre un socio: c ódigo del socio, nombre, dirección, teléfono y libros que actualmente tiene en préstamo asícomo la fecha del préstamo.
-consultar los préstamos históricos de un socio: código del libro, fecha del préstamo y fecha de la devolución.
-dar de alta, dar de baja y modificar los datos de un socio.
-gestionar los préstamos: prestar un libro a un socio y registrar la devolución de un libro.
Ejercicio de prácticas.
Algunas restricciones de integridad que se han detectado son:
-el código del libro identifica unívocamente al libro.
-el código del socio identifica unívocamente al socio.
-el conjunto de temas utilizados para clasificar un libro son: física, electricidad, mec ánica y óptica.
-la fecha de devolución de un libro debe ser posterior a la fecha de préstamo.
-el número total de libros que tiene prestados un socio es un dato derivado que será mantenido automáticamente por el sistema.
Realizar las siguientes tareas:
•definir el esquema relacional de la base datos anterior (usando los conceptos del modelo relacional).
•definir la base de datos en el sistema ORACLE9.
•realizar actualizaciones y consultas sobre la base de datos creada.