Trigger: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Keine Bearbeitungszusammenfassung
Zeile 7: Zeile 7:


=Vorteile=
=Vorteile=
- Oft ist es notwendig, bei einer Löschung eines Kunden oder Users weitere Löschvorgänge auszuführen, die möglicherweise noch im System verbleiben könnten.
#Oft ist es notwendig, bei einer Löschung eines Kunden oder Users weitere Löschvorgänge auszuführen, die möglicherweise noch im System verbleiben könnten.
- Protokollerstellung bei einem Löschvorgang
#Protokollerstellung bei einem Löschvorgang
- Bestimmte Hinweise oder Vorgänge anzeigen bzw. auszuführen
#Auslösung von Vorgängen bei einem bestimmten Fall (z.B.: Mitgliederzahl über 100)


=Implementierung von Triggern: Syntax=
=Implementierung von Triggern: Syntax=
vollständiger Syntax:


CREATE TRIGGER trigger-name
''Anlegen eines Triggers''
<source lang="sql">
CREATE TRIGGER triggername
[BEFORE | AFTER] [ INSERT | DELETE | UPDATE [OR ...] ]
[BEFORE | AFTER] [ INSERT | DELETE | UPDATE [OR ...] ]
ON table-name FOR EACH ROW
ON tablename FOR EACH ROW
EXECUTE PROCEDURE function-name [(args)];
EXECUTE PROCEDURE functionname [(args)];
</source>
 
''Löschen eines Triggers''
<source lang="sql">
DROP TRIGGER triggername
</source>


=Beispiele=
=Beispiele=
==Automatisches Füllen von Datenbankfelder==
==Automatische Sicherung von Inhalten einer Tabelle in eine zweite Tabelle==
'''1. Schritt: Erstellung einer Tabelle'''
 
<source lang="sql">
CREATE TABLE tabelle1
(
id integer primary key,
name      varchar(40) not null,
telefon varchar(10),
umsatz decimal(10,2)
);
</source>
 
''Erklärung'': Anlegen der Tabelle.
 
 
 
'''2. Schritt: Erstellung der Sicherungstabelle'''
 
<source lang="sql">
CREATE TABLE tabelle1_backup
(
        id                 integer primary key,
name                      varchar(40) not null,
telefon                 varchar(10),
umsatz                 decimal(10,2)
user_changed varchar(40),
date_changed date,
operation varchar(15)
);
</source>
 
''Erklärung'': Anlegen der Sicherungstabelle mit den gleichen Spalten aus der Haupttabelle und zusätzlichen SPalten, die das Datum, die vorgenommene Änderung und User speichern.
 
 
 
'''3. Schritt: Erstellung einer Funktion für die automatische Sicherung'''
 
<source lang="sql">
CREATE FUNCTION backup_tabelle1() RETURNS OPAQUE AS ‘
BEGIN
INSERT INTO tabelle1_backup
VALUES
(
OLD.id,
OLD.name,
OLD.telefon,
OLD.umsatz,
CURRENT_USER,
now(),
TG_OP
);
RETURN NULL;
END;
‘ LANGUAGE ‘plpgsql’
</source>
 
''Erklärung'': Die Funktion backup_tabelle1() nimmt die nicht mehr aktuellen Werte aus tabelle1 und speichert sie in der tabelle1_backup als eine neue Zeile.
 
 
 
'''4. Erstellung des Triggers'''
 
<source lang="sql">
CREATE TRIGGER backup_tabelle1
AFTER DELETE OR UPDATE
ON tabelle1
FOR EACH ROW
EXECUTE PROCEDURE backup_tabelle1();
</source>


''Erklärung'': Der Trigger wird erstellt und nach jedem DELETE oder UPDATE Befehl der auf die tabelle1 ausgeführt wird, ruft er die Funktion backup_tabelle1() auf,


==Automatischen INSERT anhand einer bestimmten Anzahl==
Auflistung der Beispiele mit Code


=Quellen=
=Quellen=
Zeile 33: Zeile 108:




[[Kategorie:PostgreSQL]]
[[Kategorie:SQL]]
[[Kategorie:SQL]]
[[Kategorie:Glossar]]
[[Kategorie:Glossar]]
[[Kategorie:GlossarWiki]]
[[Kategorie:GlossarWiki]]

Version vom 10. Juli 2009, 11:11 Uhr

Dieser Artikel wird derzeit von einem Autor gründlich bearbeitet. Die Inhalte sind daher evtl. noch inkonsistent.


Definition

In Datenbanken ist es neben der Speicherung und Abfrage von Daten auch möglich Logik selbst zu implementieren. Trigger gehören zum Bereich Logik und werden automatisch bei bestimmten Ereignissen, wie UPDATE, INSERT oder DELETE von Daten, ausgelöst.


Vorteile

  1. Oft ist es notwendig, bei einer Löschung eines Kunden oder Users weitere Löschvorgänge auszuführen, die möglicherweise noch im System verbleiben könnten.
  2. Protokollerstellung bei einem Löschvorgang
  3. Auslösung von Vorgängen bei einem bestimmten Fall (z.B.: Mitgliederzahl über 100)

Implementierung von Triggern: Syntax

Anlegen eines Triggers

CREATE TRIGGER triggername
[BEFORE | AFTER] [ INSERT | DELETE | UPDATE [OR ...] ]
	ON tablename FOR EACH ROW
	EXECUTE PROCEDURE functionname [(args)];

Löschen eines Triggers

DROP TRIGGER triggername

Beispiele

Automatische Sicherung von Inhalten einer Tabelle in eine zweite Tabelle

1. Schritt: Erstellung einer Tabelle

CREATE TABLE tabelle1
(
	id		integer primary key,
	name      varchar(40) not null,
	telefon	varchar(10),
	umsatz	decimal(10,2)
);

Erklärung: Anlegen der Tabelle.


2. Schritt: Erstellung der Sicherungstabelle

CREATE TABLE tabelle1_backup
(
        id		                integer primary key,
	name                      varchar(40) not null,
	telefon	                varchar(10),
	umsatz	                decimal(10,2)
	user_changed	varchar(40),
	date_changed	date,
	operation		varchar(15)
);

Erklärung: Anlegen der Sicherungstabelle mit den gleichen Spalten aus der Haupttabelle und zusätzlichen SPalten, die das Datum, die vorgenommene Änderung und User speichern.


3. Schritt: Erstellung einer Funktion für die automatische Sicherung

CREATE FUNCTION backup_tabelle1() RETURNS OPAQUE AS 
	BEGIN
		INSERT INTO tabelle1_backup
			VALUES
			(
				OLD.id,
				OLD.name,
				OLD.telefon,
				OLD.umsatz,
				CURRENT_USER,
				now(),
				TG_OP
			);
		RETURN NULL;
	END;
 LANGUAGE plpgsql

Erklärung: Die Funktion backup_tabelle1() nimmt die nicht mehr aktuellen Werte aus tabelle1 und speichert sie in der tabelle1_backup als eine neue Zeile.


4. Erstellung des Triggers

CREATE TRIGGER backup_tabelle1
	AFTER DELETE OR UPDATE
	ON tabelle1
	FOR EACH ROW
		EXECUTE PROCEDURE backup_tabelle1();

Erklärung: Der Trigger wird erstellt und nach jedem DELETE oder UPDATE Befehl der auf die tabelle1 ausgeführt wird, ruft er die Funktion backup_tabelle1() auf,


Quellen