0% encontró este documento útil (0 votos)
258 vistas22 páginas

Disparadores PDF

Un disparador es una acción definida en una tabla de base de datos que se ejecuta automáticamente por un procedimiento almacenado cuando ocurre un evento como INSERT, UPDATE o DELETE. Los disparadores pueden definirse para ejecutarse antes o después del evento, por cada fila afectada o una sola vez por comando SQL, y utilizan variables especiales como NEW, OLD, TG_NAME y TG_LEVEL.

Cargado por

jose2175
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
258 vistas22 páginas

Disparadores PDF

Un disparador es una acción definida en una tabla de base de datos que se ejecuta automáticamente por un procedimiento almacenado cuando ocurre un evento como INSERT, UPDATE o DELETE. Los disparadores pueden definirse para ejecutarse antes o después del evento, por cada fila afectada o una sola vez por comando SQL, y utilizan variables especiales como NEW, OLD, TG_NAME y TG_LEVEL.

Cargado por

jose2175
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Disparadores (Triggers)

Disparador (Trigger)
Un disparador es una accin definida
en una tabla de la base de datos y que
se ejecuta automticamente por un
procedimiento
almacenado.
El
disparador se activar, segn se
defina, cuando se realice un INSERT,
un UPDATE un DELETE.

Un Disparador se crea:
Para que ocurra ANTES de cualquier
INSERT, UPDATE o DELETE
Para que ocurra DESPUS de cualquier
INSERT, UPDATE o DELETE
Para que se ejecute una sola vez por
comando SQL
Para que se ejecute por cada lnea
afectada por un comando

Disparador (Sintaxis en Postgres)


CREATE TRIGGER nombre { BEFORE |
AFTER } { INSERT | UPDATE | DELETE [
OR ... ] } ON tabla [ FOR [ EACH ] { ROW
| STATEMENT } ] EXECUTE PROCEDURE
nombre de funcin ( argumentos )

NEW
Tipo de dato RECORD; Variable
que contiene la nueva fila de la
tabla para las operaciones
INSERT/UPDATE en disparadores
del tipo row-level. Esta variable es
NULL en disparadores del tipo
statement-level.

OLD
Tipo de dato RECORD; Variable
que contiene la antigua fila de la
tabla para las operaciones
UPDATE/DELETE en disparadores
del tipo row-level. Esta variable es
NULL en disparadores del tipo
statement-level.

TG_NAME
Tipo de dato name; variable
que contiene el nombre del
disparador que est usando la
funcin actualmente.

TG_WHEN
Tipo de dato text; una cadena
de texto con el valor BEFORE o
AFTER dependiendo de como el
disparador que est usando la
funcin actualmente ha sido
definido.

TG_LEVEL
Tipo de dato text; una cadena
de texto con el valor ROW o
STATEMENT dependiendo de
como el disparador que est
usando la funcin actualmente
ha sido definido.

TG_OP
Tipo de dato text; una cadena
de texto con el valor INSERT,
UPDATE o DELETE dependiendo
de la operacin que ha activado
el disparador que est usando la
funcin actualmente.

Ejemplo 1 Parte 1
CREATE TABLE numeros
(numero bigint NOT NULL,
cuadrado bigint,
cubo bigint,
raiz2 real,
raiz3 real,
PRIMARY KEY (numero) );

Ejemplo 1 Parte 2
CREATE OR REPLACE FUNCTION rellenar_datos()
RETURNS TRIGGER AS $rellenar_datos$
BEGIN
[Link] := power([Link],2);
[Link] := power([Link],3);
NEW.raiz2 := sqrt([Link]);
NEW.raiz3 := cbrt([Link]);
RETURN NEW;
END;
$rellenar_datos$ LANGUAGE plpgsql;

Ejemplo 1 Parte 3
CREATE TRIGGER rellenar_datos
BEFORE INSERT OR UPDATE
ON numeros FOR EACH ROW
EXECUTE PROCEDURE rellenar_datos();

Ejemplo 2 Parte 1
CREATE OR REPLACE FUNCTION
proteger_datos()
RETURNS TRIGGER AS $proteger_datos$
BEGIN
RETURN NULL;
END;
$proteger_datos$ LANGUAGE plpgsql;

Ejemplo 2 Parte 2
CREATE TRIGGER proteger_datos
BEFORE DELETE
ON numeros FOR EACH ROW
EXECUTE PROCEDURE
proteger_datos();

Ejemplo 3 Parte 1
DROP TRIGGER proteger_datos ON numeros
DROP TRIGGER rellenar_datos ON numeros

Ejemplo 3 Parte 2
CREATE OR REPLACE FUNCTION proteger_y_rellenar_datos()
RETURNS TRIGGER AS $proteger_y_rellenar_datos$
BEGIN
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE' ) THEN
[Link] := power([Link],2);
[Link] := power([Link],3);
NEW.raiz2 := sqrt([Link]);
NEW.raiz3 := cbrt([Link]);
RETURN NEW;
ELSEIF (TG_OP = 'DELETE') THEN
RETURN NULL;
END IF; END;
$proteger_y_rellenar_datos$ LANGUAGE plpgsql;

Ejemplo 3 Parte 3
CREATE TRIGGER proteger_y_rellenar_datos
BEFORE INSERT OR UPDATE OR DELETE
ON numeros
FOR EACH ROW
EXECUTE PROCEDURE
proteger_y_rellenar_datos();

Ejemplo 4 Parte 1
CREATE TABLE cambios
( timestamp_ TIMESTAMP WITH TIME ZONE
default NOW(),
nombre_disparador text,
tipo_disparador text,
nivel_disparador text,
usuario text,
comando text );

Ejemplo 4 Parte 2
CREATE OR REPLACE FUNCTION
grabar_operaciones()
RETURNS TRIGGER AS $grabar_operaciones$
BEGIN
INSERT INTO cambios (nombre_disparador,
tipo_disparador, nivel_disparador, usuario,
comando)
VALUES (TG_NAME, TG_WHEN, TG_LEVEL,
USER, TG_OP);
RETURN NULL;
END;
$grabar_operaciones$ LANGUAGE plpgsql;

Ejemplo 4 Parte 3
CREATE TRIGGER grabar_operaciones
AFTER INSERT OR UPDATE OR DELETE
ON numeros
FOR EACH STATEMENT
EXECUTE PROCEDURE grabar_operaciones();

Tomado de:
Portal en Espaol de PostgreSQL
[Link]

También podría gustarte