Untitled

mail@pastecode.io avatar
unknown
sql
2 years ago
2.2 kB
0
Indexable
Never
CREATE TABLE Amigo(
	Nombre VARCHAR(50),
	Edad INTEGER
);
SET SERVEROUTPUT ON; --Para activar la salida por pantalla
--Se define un disparador sobre esta tabla
CREATE OR REPLACE TRIGGER dispAmigo
BEFORE INSERT OR UPDATE --Un trigger se ejecuta cuando hace un INSERT OR UPDATE OR DELETE
--tambien se puede poner para que se lance cuando se hace un cambio de un campo
--INSERT OR UPDATE OR DELETE OF Nombre
--Tambien se puede poner BEFORE(antes de los cambios) o AFTER(despues de los cambios)
ON Amigo
FOR EACH ROW -- Esto hace que se ejecute en cada fila
BEGIN
	--Aqui código del trigger
	dbms_output.put_line('**Ejecutando trigger');
	--Distincion de casos
	IF INSERTING THEN 
		dbms_output.put_line('**Capturo insercion');
	ELSE
		dbms_output.put_line('**Capturo actualizacion');
END;



CREATE OR REPLACE TRIGGER dispAmigo2
BEFORE  UPDATE
ON Amigo
FOR EACH ROW when (NEW.Edad > 50) --Para restringir el evento de update
								  --para que se cumpla algo en concreto
								  --el NEW es despues de la modificación
								  --y el OLD para antes de la modificación
BEGIN
	dbms_output.put_line('**Capturo actualizacion');
	dbms_output.put_line('**Antes: ' || :OLD.Edad);
	dbms_output.put_line('**Despues: ' || :NEW.Edad);
END;

INSERT INTO AMIGO VALUES ('Pepe', 39);
UPDATE amigo SET edad = 69
WHERE name = 'Pepe';


--A veces en el old y new puedes acceder a valores NULL
--En el evento de INSERT, los valores OLD son NULL. Antes de la 
--insercion las filas no existian por lo tanto serán NULL
--En el evento de DELETE es parecido, en NEW será NULL


--Lunes 8 de octubre, 100mins de examen
	--Consultas SQL ( 5 preguntas)
	--Procedimientos/Funciones, PL/SQL (1 pregunta)
	--Disparadores, no caen
	--Los ejercicios son parecidos(¿iguales?) al de examen
	--Seguramente dejará acceso a los apuntes del campus
	--Los errores de detalles no le importa mucho(¿era INSERTING o INSERT?)
	--Mismo nivel que el examenes FINALES
	
	
	
--Diapo 14, de transacciones y concurrencia
--1er transaccion 1 al 5
--2da transaccion 6 al 7
--3ra transaccion 8 , (la 9 no cuenta ha fallado por tener primary key repetida) al 11
--4ta transaccion, sin confirmar