SlideShare una empresa de Scribd logo
1 de 6
Triggers o Disparadores SQL
Triggers SQL
Todos estaremos de acuerdo en que una de las cosas más importantes en
todo negocio son los datos, ¿verdad? Pues bien, imagineuna basede datos
sobre la que interactúan concurrentemente muchos usuarios a través de
distintas aplicaciones, web o de escritorio. ¿Qué sucedería si una de estas
aplicaciones gestionase los datos incorrectamente?
Por ejemplo, imagine una aplicación de escritorio que interactúa
directamente a través de JDBC con el BD y que dicha aplicación usa la hora
de la máquina del usuario como hora en la que se realizan las operaciones,
¿terrible, ¿verdad? pues bien, estos y otros problemas pueden ser
solucionados con mecanismos como los Triggers o disparadores de BD
(como veremos en los ejemplos).
Los Triggers o disparadores son objetos de la base de datos que
ejecutan acciones cuando se producen ciertos eventos (tanto DML como
DDL) (inserciones, modificaciones, borrados, creación de tablas, etc.).
A continuación, y a modo de consulta os voy a mostrar un ejemplo de un
Triggers DML que realiza las siguientes tareas:
Dada una tabla con información sobre “expedientes”, vamos a crear un
Triggers que controle las modificaciones del “estado del expediente” de la
siguiente manera:
1. Anotará en el campo “stateChangedDate” la fecha/hora en la que se
produjo un cambio de estado.
2. A modo de histórico, insertará un registro en tabla “expStatusHistory”
con información sobrelos cambios de estado de cada expediente.
Fácil ¿verdad?, pues bueno, mamos a la obra.
 Ejemplo auto comentado en MySQL
 Ejemplo auto comentado en SQL Server
Ejemplo en MySQL.
1
2
DELIMITER$$
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
USE db_test;
$$
# Creamos el Schema si no existe
CREATE SCHEMA IF NOTEXISTS db_test;
$$
-- Eliminamos el procedimiento almacenado si existise
DROP PROCEDURE IF EXISTS db_test. procedureTemp;
$$
CREATE PROCEDURE db_test. procedureTemp ()
BEGIN
DECLARE cuenta INTDEFAULT 0;
-- Si no existe la tabla de expedientes, la creamos.
SELECT COUNT (*) INTO cuenta FROM `information_Schema`. `tables`
WHERE TABLE_SCHEMA='db_test' AND TABLE_NAME='expedientes' LI
MIT1;
IF (cuenta = 0) THEN
CREATE TABLE `expedientes` (
code VARCHAR(15) NOT NULL COMMENT'Código del exped
iente',
state VARCHAR(20) COMMENT 'Estado del expediente',
stateChangedDate DATETIME COMMENT'Fecha/Hora en la que s
e produció el último cambio de estado',
PRIMARY KEY `PK_Exp` (code)
) ENGINE=InnoDBCHARSET=utf8 collate=utf8_general_ci;
END IF;
-- Insertamos algunos expedientes de ejemplo
DELETE FROM expedientes WHEREcode IN('exp1','exp2', 'exp3');
INSERTINTO expedientes (code) VALUES ('exp1');
INSERTINTO expedientes (code) VALUES ('exp2');
INSERTINTO expedientes (code) VALUES ('exp3');
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
-- Si no existe la tabla de cambios de esstado la creamos
SELECT COUNT (*) INTO cuenta FROM `information_Schema`.`tables`
WHERE TABLE_SCHEMA='db_test' AND TABLE_NAME='expStatusHisto
ry' LIMIT1;
IF (cuenta = 0) THEN
CREATE TABLE `expStatusHistory`(
`id` INT AUTO_INCREMENT,
`code` VARCHAR (15) NOTNULL COMMENT 'Código del expediente
',
`state` VARCHAR (20) NOTNULL COMMENT 'Estado del expediente
',
`date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT'F
echa/Hora en la que el expediente pasó a ese estado',
PRIMARY KEY `PK_ExpHistory` (`id`)
) ENGINE=MyISAM CHARSET=utf8 collate=utf8_general_ci; -- No tra
nsacciones => MyISAM
END IF;
END;
$$
-- Invocamos elprocedimiento almacenado
CALL db_test. procedureTemp ();
$$
-- Borramos el procedimiento almacenado
DROP PROCEDURE IF EXISTS db_test. procedureTemp;
$$
-- Borramos el Triggers siexistise
DROP TRIGGERIF EXISTS StatusChangeDateTrigger;
$$
-- Cremamos un Triggers sobrela tabla expedientes
83
84
85
86
87
88
CREATE TRIGGERStatusChangeDateTrigger
BEFORE UPDATE ON expedientes FOR EACH ROW
BEGIN
-- ¿Ha cambiado el estado?
IF NEW.state! = OLD.stateTHEN
-- Actualizamos el campo stateChangedDatea la fecha/hora act
ual
SET NEW.stateChangedDate= NOW ();
-- A modo de auditoría, añadimos un registro en la tabla expStat
usHistory
INSERTINTO expStatusHistory (`code`, `state`) VALUES (NEW.co
de, NEW.state);
END IF;
END;
$$
DELIMITER;
Ejemplo en SQL Server.
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- --------------------------------------------------------------------
-- Creamos una base de datos si no existiese.
-- --------------------------------------------------------------------
IF NOTEXISTS (SELECT * from sys. databases wherename= 'db_test')
BEGIN
CREATE DATABASE db_test;
END
-- Establecemos la basede datos predeterminada
USE db_test;
-- --------------------------------------------------------------------
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
-- Creamos una tabla si no existiese.
-- Representa los datos de expedientes
-- --------------------------------------------------------------------
IF NOTEXISTS (SELECT * FROM sys. sys. objects WHEREname='expedie
ntes' AND xtype='U')
BEGIN
CREATE TABLE expedientes (
code VARCHAR(15) NOT NULL,
state VARCHAR(20) DEFAULT 'INICIO',
stateChangedDate DATETIME,
PRIMARY KEY (code)
);
END;
-- Insertamos algunos expedientes de ejemplo
DELETE FROM expedientes WHERE code IN('exp1','exp2', 'exp3');
INSERT INTO expedientes (code) VALUES ('exp1');
INSERT INTO expedientes (code) VALUES ('exp2');
INSERT INTO expedientes (code) VALUES ('exp3');
-- Si no existe la tabla de cambios de esstado la creamos
IF NOTEXISTS (SELECT * FROM sys. sys. objects WHEREname='expStat
usHistory' AND xtype='U')
BEGIN
CREATE TABLE expStatusHistory (
id INT IDENTITY,
code VARCHAR (15) NOTNULL,
state VARCHAR(20) NOTNULL,
date DATETIME DEFAULT GetDate (),
PRIMARY KEY (id)
);
END;
-- Borramos el Triggers siexistise
IF OBJECT_ID ('StatusChangeDateTrigger', 'TR') IS NOTNULL
BEGIN
DROP TRIGGERStatusChangeDateTrigger;
END;
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
GO -- Necesario
-- Cremamos un Triggers sobrela tabla expedientes
CREATE TRIGGERStatusChangeDateTrigger
ON expedientes
AFTER UPDATE AS
-- ¿Ha cambiado el estado?
IF UPDATE(state)
BEGIN
-- Actualizamos el campo stateChangedDate a la fecha/hora actu
al
UPDATEexpedientes SET stateChangedDate=GetDate () WHERE
code= (SELECT code FROM inserted);
-- A modo de auditoría, añadimos un registro en la tabla expStatusHi
story
INSERTINTO expStatusHistory (code, state) (SELECTcode, state
FROM deleted WHEREcode=deleted. code);
-- La tabla deleted contiene información sobrelos valores ANTIGUOS
mientras que la tabla inserted contiene los NUEVOS valores.
-- Ambas tablas son virtuales y tienen la misma estructura que la tab
la a la que se asocia el Trigger.
END;

Más contenido relacionado

La actualidad más candente

Disparadores
DisparadoresDisparadores
DisparadoresZiscko
 
Carlos eduardo, documento de aplicacion en android
Carlos eduardo, documento de aplicacion en androidCarlos eduardo, documento de aplicacion en android
Carlos eduardo, documento de aplicacion en androidyz8001
 
SQL Server rápido y furioso
SQL Server rápido y furiosoSQL Server rápido y furioso
SQL Server rápido y furiosoSpanishPASSVC
 
Transacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQLTransacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQLLuiS YmAY
 
Práctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptPráctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptjubacalo
 
Ejemplo de base de datos y reports con jasper report
Ejemplo de base de datos y reports con jasper reportEjemplo de base de datos y reports con jasper report
Ejemplo de base de datos y reports con jasper reportjbersosa
 
Taller de MySQL (DDL)
Taller de MySQL (DDL)Taller de MySQL (DDL)
Taller de MySQL (DDL)mgpc
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM Kamisutra
 
Uso java jdbc
Uso java jdbcUso java jdbc
Uso java jdbcjbersosa
 
Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)José Toro
 
Tallerprogramacion
TallerprogramacionTallerprogramacion
Tallerprogramacionjohanadoria
 
9. Uso De Procedimientos Almacenados
9.  Uso De Procedimientos Almacenados9.  Uso De Procedimientos Almacenados
9. Uso De Procedimientos Almacenadosguest3cf6ff
 

La actualidad más candente (20)

Disparadores
DisparadoresDisparadores
Disparadores
 
Carlos eduardo, documento de aplicacion en android
Carlos eduardo, documento de aplicacion en androidCarlos eduardo, documento de aplicacion en android
Carlos eduardo, documento de aplicacion en android
 
Buenas
BuenasBuenas
Buenas
 
SQL Server rápido y furioso
SQL Server rápido y furiosoSQL Server rápido y furioso
SQL Server rápido y furioso
 
Transacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQLTransacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQL
 
Práctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptPráctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScript
 
MANUAL
MANUALMANUAL
MANUAL
 
Bc kardex sae 5.0
Bc kardex sae 5.0Bc kardex sae 5.0
Bc kardex sae 5.0
 
Ejemplo de base de datos y reports con jasper report
Ejemplo de base de datos y reports con jasper reportEjemplo de base de datos y reports con jasper report
Ejemplo de base de datos y reports con jasper report
 
Taller de MySQL (DDL)
Taller de MySQL (DDL)Taller de MySQL (DDL)
Taller de MySQL (DDL)
 
Hack x crack_sq_linjection
Hack x crack_sq_linjectionHack x crack_sq_linjection
Hack x crack_sq_linjection
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
 
Uso java jdbc
Uso java jdbcUso java jdbc
Uso java jdbc
 
Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)
 
Tallerprogramacion
TallerprogramacionTallerprogramacion
Tallerprogramacion
 
Procedimientos almacenados en MySQL
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQL
 
Sql procedimientos-almacenados
Sql procedimientos-almacenadosSql procedimientos-almacenados
Sql procedimientos-almacenados
 
Consultas
ConsultasConsultas
Consultas
 
BigData - NoSQL
BigData -  NoSQL BigData -  NoSQL
BigData - NoSQL
 
9. Uso De Procedimientos Almacenados
9.  Uso De Procedimientos Almacenados9.  Uso De Procedimientos Almacenados
9. Uso De Procedimientos Almacenados
 

Destacado

SPACE DETECTIVE - EPK small
SPACE DETECTIVE - EPK smallSPACE DETECTIVE - EPK small
SPACE DETECTIVE - EPK smallAntonio Llapur
 
Funciones de sql server
Funciones de sql serverFunciones de sql server
Funciones de sql serverdioselina123
 
Triggers disparador
Triggers disparadorTriggers disparador
Triggers disparadordioselina123
 
Tupac amaru
Tupac amaruTupac amaru
Tupac amaruGRR15
 
Procedimientos almacenados ensql actualizar
Procedimientos almacenados ensql  actualizarProcedimientos almacenados ensql  actualizar
Procedimientos almacenados ensql actualizardioselina123
 
HEMANT'S RESUME- B
HEMANT'S RESUME- BHEMANT'S RESUME- B
HEMANT'S RESUME- BHemant Mota
 
Arbitration power point
Arbitration power pointArbitration power point
Arbitration power pointkcboggs
 
Bryan Berger on Distraction Free Design Sprints at Design Driven NYC
Bryan Berger on Distraction Free Design Sprints at Design Driven NYCBryan Berger on Distraction Free Design Sprints at Design Driven NYC
Bryan Berger on Distraction Free Design Sprints at Design Driven NYCBryan Berger
 

Destacado (14)

ESTRUCTURA SOCIAL LIZ ALTUVE T8
ESTRUCTURA SOCIAL LIZ ALTUVE T8ESTRUCTURA SOCIAL LIZ ALTUVE T8
ESTRUCTURA SOCIAL LIZ ALTUVE T8
 
Vistas
VistasVistas
Vistas
 
SPACE DETECTIVE - EPK small
SPACE DETECTIVE - EPK smallSPACE DETECTIVE - EPK small
SPACE DETECTIVE - EPK small
 
Funciones de sql server
Funciones de sql serverFunciones de sql server
Funciones de sql server
 
Triggers disparador
Triggers disparadorTriggers disparador
Triggers disparador
 
Estructura social
Estructura socialEstructura social
Estructura social
 
Tupac amaru
Tupac amaruTupac amaru
Tupac amaru
 
Caso de estudio joins
Caso de estudio joinsCaso de estudio joins
Caso de estudio joins
 
Procedimientos almacenados ensql actualizar
Procedimientos almacenados ensql  actualizarProcedimientos almacenados ensql  actualizar
Procedimientos almacenados ensql actualizar
 
HEMANT'S RESUME- B
HEMANT'S RESUME- BHEMANT'S RESUME- B
HEMANT'S RESUME- B
 
Bienvenida a android
Bienvenida a androidBienvenida a android
Bienvenida a android
 
Arbitration power point
Arbitration power pointArbitration power point
Arbitration power point
 
Bryan Berger on Distraction Free Design Sprints at Design Driven NYC
Bryan Berger on Distraction Free Design Sprints at Design Driven NYCBryan Berger on Distraction Free Design Sprints at Design Driven NYC
Bryan Berger on Distraction Free Design Sprints at Design Driven NYC
 
Sistemul solar
Sistemul solarSistemul solar
Sistemul solar
 

Similar a Trigger disparadoes

Manualitosqlserver
ManualitosqlserverManualitosqlserver
ManualitosqlserverOca srl
 
instalacion y conexion a base de datos postgrest /java
instalacion y conexion a base de datos postgrest /javainstalacion y conexion a base de datos postgrest /java
instalacion y conexion a base de datos postgrest /javaNey Rogger Miranda
 
ManualPracticoSQL.pdf
ManualPracticoSQL.pdfManualPracticoSQL.pdf
ManualPracticoSQL.pdfJenny29068
 
Disparadores
DisparadoresDisparadores
Disparadoreselylupita
 
Portafolio 1 sql
Portafolio 1 sqlPortafolio 1 sql
Portafolio 1 sqlJuanKMillos
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql ServerCorfapo
 
Auditoria en oracle
Auditoria en oracleAuditoria en oracle
Auditoria en oraclevictdiazm
 
Programacion de bases de datos en OOoBasic
Programacion de bases de datos en OOoBasicProgramacion de bases de datos en OOoBasic
Programacion de bases de datos en OOoBasicAlexandro Colorado
 
Manual practico para sql ingieneria de sistemas
Manual practico para sql ingieneria de sistemas  Manual practico para sql ingieneria de sistemas
Manual practico para sql ingieneria de sistemas Crhis
 
Manual practico SQL
Manual practico SQLManual practico SQL
Manual practico SQLAna Aguirre
 
Afinamientodebasesdedatosyservidoreswebs
AfinamientodebasesdedatosyservidoreswebsAfinamientodebasesdedatosyservidoreswebs
Afinamientodebasesdedatosyservidoreswebsricardosusa5
 

Similar a Trigger disparadoes (20)

Ejemplo bbdd sqlite (android)
Ejemplo bbdd sqlite (android)Ejemplo bbdd sqlite (android)
Ejemplo bbdd sqlite (android)
 
Ejemplo Base de Datos SQLite (Android)
Ejemplo Base de Datos SQLite (Android)Ejemplo Base de Datos SQLite (Android)
Ejemplo Base de Datos SQLite (Android)
 
Manualitosqlserver
ManualitosqlserverManualitosqlserver
Manualitosqlserver
 
instalacion y conexion a base de datos postgrest /java
instalacion y conexion a base de datos postgrest /javainstalacion y conexion a base de datos postgrest /java
instalacion y conexion a base de datos postgrest /java
 
Textos sqli_mssql
 Textos sqli_mssql Textos sqli_mssql
Textos sqli_mssql
 
ManualPracticoSQL.pdf
ManualPracticoSQL.pdfManualPracticoSQL.pdf
ManualPracticoSQL.pdf
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Portafolio 1 sql
Portafolio 1 sqlPortafolio 1 sql
Portafolio 1 sql
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
 
Mysql
MysqlMysql
Mysql
 
Auditoria en oracle
Auditoria en oracleAuditoria en oracle
Auditoria en oracle
 
Programacion de bases de datos en OOoBasic
Programacion de bases de datos en OOoBasicProgramacion de bases de datos en OOoBasic
Programacion de bases de datos en OOoBasic
 
Manual practico para sql ingieneria de sistemas
Manual practico para sql ingieneria de sistemas  Manual practico para sql ingieneria de sistemas
Manual practico para sql ingieneria de sistemas
 
Manual practico SQL
Manual practico SQLManual practico SQL
Manual practico SQL
 
Manual practicosql
Manual practicosqlManual practicosql
Manual practicosql
 
Manual practico SQL
Manual practico SQLManual practico SQL
Manual practico SQL
 
Manual practico-sql
Manual practico-sqlManual practico-sql
Manual practico-sql
 
Afinamientodebasesdedatosyservidoreswebs
AfinamientodebasesdedatosyservidoreswebsAfinamientodebasesdedatosyservidoreswebs
Afinamientodebasesdedatosyservidoreswebs
 

Último

SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxinformacionasapespu
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docxAleParedes11
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 

Último (20)

Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 

Trigger disparadoes

  • 1. Triggers o Disparadores SQL Triggers SQL Todos estaremos de acuerdo en que una de las cosas más importantes en todo negocio son los datos, ¿verdad? Pues bien, imagineuna basede datos sobre la que interactúan concurrentemente muchos usuarios a través de distintas aplicaciones, web o de escritorio. ¿Qué sucedería si una de estas aplicaciones gestionase los datos incorrectamente? Por ejemplo, imagine una aplicación de escritorio que interactúa directamente a través de JDBC con el BD y que dicha aplicación usa la hora de la máquina del usuario como hora en la que se realizan las operaciones, ¿terrible, ¿verdad? pues bien, estos y otros problemas pueden ser solucionados con mecanismos como los Triggers o disparadores de BD (como veremos en los ejemplos). Los Triggers o disparadores son objetos de la base de datos que ejecutan acciones cuando se producen ciertos eventos (tanto DML como DDL) (inserciones, modificaciones, borrados, creación de tablas, etc.). A continuación, y a modo de consulta os voy a mostrar un ejemplo de un Triggers DML que realiza las siguientes tareas: Dada una tabla con información sobre “expedientes”, vamos a crear un Triggers que controle las modificaciones del “estado del expediente” de la siguiente manera: 1. Anotará en el campo “stateChangedDate” la fecha/hora en la que se produjo un cambio de estado. 2. A modo de histórico, insertará un registro en tabla “expStatusHistory” con información sobrelos cambios de estado de cada expediente. Fácil ¿verdad?, pues bueno, mamos a la obra.  Ejemplo auto comentado en MySQL  Ejemplo auto comentado en SQL Server Ejemplo en MySQL. 1 2 DELIMITER$$
  • 2. 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 USE db_test; $$ # Creamos el Schema si no existe CREATE SCHEMA IF NOTEXISTS db_test; $$ -- Eliminamos el procedimiento almacenado si existise DROP PROCEDURE IF EXISTS db_test. procedureTemp; $$ CREATE PROCEDURE db_test. procedureTemp () BEGIN DECLARE cuenta INTDEFAULT 0; -- Si no existe la tabla de expedientes, la creamos. SELECT COUNT (*) INTO cuenta FROM `information_Schema`. `tables` WHERE TABLE_SCHEMA='db_test' AND TABLE_NAME='expedientes' LI MIT1; IF (cuenta = 0) THEN CREATE TABLE `expedientes` ( code VARCHAR(15) NOT NULL COMMENT'Código del exped iente', state VARCHAR(20) COMMENT 'Estado del expediente', stateChangedDate DATETIME COMMENT'Fecha/Hora en la que s e produció el último cambio de estado', PRIMARY KEY `PK_Exp` (code) ) ENGINE=InnoDBCHARSET=utf8 collate=utf8_general_ci; END IF; -- Insertamos algunos expedientes de ejemplo DELETE FROM expedientes WHEREcode IN('exp1','exp2', 'exp3'); INSERTINTO expedientes (code) VALUES ('exp1'); INSERTINTO expedientes (code) VALUES ('exp2'); INSERTINTO expedientes (code) VALUES ('exp3');
  • 3. 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 -- Si no existe la tabla de cambios de esstado la creamos SELECT COUNT (*) INTO cuenta FROM `information_Schema`.`tables` WHERE TABLE_SCHEMA='db_test' AND TABLE_NAME='expStatusHisto ry' LIMIT1; IF (cuenta = 0) THEN CREATE TABLE `expStatusHistory`( `id` INT AUTO_INCREMENT, `code` VARCHAR (15) NOTNULL COMMENT 'Código del expediente ', `state` VARCHAR (20) NOTNULL COMMENT 'Estado del expediente ', `date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT'F echa/Hora en la que el expediente pasó a ese estado', PRIMARY KEY `PK_ExpHistory` (`id`) ) ENGINE=MyISAM CHARSET=utf8 collate=utf8_general_ci; -- No tra nsacciones => MyISAM END IF; END; $$ -- Invocamos elprocedimiento almacenado CALL db_test. procedureTemp (); $$ -- Borramos el procedimiento almacenado DROP PROCEDURE IF EXISTS db_test. procedureTemp; $$ -- Borramos el Triggers siexistise DROP TRIGGERIF EXISTS StatusChangeDateTrigger; $$ -- Cremamos un Triggers sobrela tabla expedientes
  • 4. 83 84 85 86 87 88 CREATE TRIGGERStatusChangeDateTrigger BEFORE UPDATE ON expedientes FOR EACH ROW BEGIN -- ¿Ha cambiado el estado? IF NEW.state! = OLD.stateTHEN -- Actualizamos el campo stateChangedDatea la fecha/hora act ual SET NEW.stateChangedDate= NOW (); -- A modo de auditoría, añadimos un registro en la tabla expStat usHistory INSERTINTO expStatusHistory (`code`, `state`) VALUES (NEW.co de, NEW.state); END IF; END; $$ DELIMITER; Ejemplo en SQL Server. Shell 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -- -------------------------------------------------------------------- -- Creamos una base de datos si no existiese. -- -------------------------------------------------------------------- IF NOTEXISTS (SELECT * from sys. databases wherename= 'db_test') BEGIN CREATE DATABASE db_test; END -- Establecemos la basede datos predeterminada USE db_test; -- --------------------------------------------------------------------
  • 5. 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 -- Creamos una tabla si no existiese. -- Representa los datos de expedientes -- -------------------------------------------------------------------- IF NOTEXISTS (SELECT * FROM sys. sys. objects WHEREname='expedie ntes' AND xtype='U') BEGIN CREATE TABLE expedientes ( code VARCHAR(15) NOT NULL, state VARCHAR(20) DEFAULT 'INICIO', stateChangedDate DATETIME, PRIMARY KEY (code) ); END; -- Insertamos algunos expedientes de ejemplo DELETE FROM expedientes WHERE code IN('exp1','exp2', 'exp3'); INSERT INTO expedientes (code) VALUES ('exp1'); INSERT INTO expedientes (code) VALUES ('exp2'); INSERT INTO expedientes (code) VALUES ('exp3'); -- Si no existe la tabla de cambios de esstado la creamos IF NOTEXISTS (SELECT * FROM sys. sys. objects WHEREname='expStat usHistory' AND xtype='U') BEGIN CREATE TABLE expStatusHistory ( id INT IDENTITY, code VARCHAR (15) NOTNULL, state VARCHAR(20) NOTNULL, date DATETIME DEFAULT GetDate (), PRIMARY KEY (id) ); END; -- Borramos el Triggers siexistise IF OBJECT_ID ('StatusChangeDateTrigger', 'TR') IS NOTNULL BEGIN DROP TRIGGERStatusChangeDateTrigger; END;
  • 6. 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 GO -- Necesario -- Cremamos un Triggers sobrela tabla expedientes CREATE TRIGGERStatusChangeDateTrigger ON expedientes AFTER UPDATE AS -- ¿Ha cambiado el estado? IF UPDATE(state) BEGIN -- Actualizamos el campo stateChangedDate a la fecha/hora actu al UPDATEexpedientes SET stateChangedDate=GetDate () WHERE code= (SELECT code FROM inserted); -- A modo de auditoría, añadimos un registro en la tabla expStatusHi story INSERTINTO expStatusHistory (code, state) (SELECTcode, state FROM deleted WHEREcode=deleted. code); -- La tabla deleted contiene información sobrelos valores ANTIGUOS mientras que la tabla inserted contiene los NUEVOS valores. -- Ambas tablas son virtuales y tienen la misma estructura que la tab la a la que se asocia el Trigger. END;