Apache Derby - Auslöser
In Datenbanken sind Trigger die Anweisungen / der Code, die bei jedem Auftreten eines Ereignisses ausgeführt werden. Sobald Sie einen Trigger für ein bestimmtes Ereignis in einer Tabelle erstellen, wird der im Trigger angegebene Code jedes Mal ausgeführt, wenn das Ereignis auftritt. Sie können mehrere Trigger für eine einzelne Tabelle erstellen.
In diesem Kapitel erfahren Sie, wie Sie mit Apache Derby Trigger erstellen und löschen.
Auslöser erstellen
Sie können einen Trigger in Derby mit der Anweisung CREATE TRIGGER erstellen.
Syntax
Es folgt die Syntax der CREATE TRIGGER-Abfrage.
CREATE TRIGGER trigger_name
{ NO CASCADE BEFORE | AFTER }
{INSERT [OR] | UPDATE [OR] | DELETE}[OF col_name]
ON table_name
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
Statement
Beispiel
Angenommen, wir haben eine Tabelle mit dem Namen Emp in Derby erstellt, wie unten gezeigt.
CREATE TABLE Emp (
Id INT NOT NULL,
Name VARCHAR(255),
Salary INT NOT NULL,
Location VARCHAR(255) );
Und 5 Zeilen eingefügt.
INSERT INTO Emp(Id, Name, Salary, Location) VALUES
(1, 'Amit', 30000, 'Hyderabad'), (2, 'Kalyan', 40000, 'Vishakhapatnam'),
(3,'Renuka', 50000, 'Delhi'), (4, 'Archana', 15000, 'Mumbai'), (5, 'Trupthi',
45000, 'Kochin');
Wenn wir eine andere Tabelle mit dem Namen BackUp haben und beabsichtigen, gelöschte Zeilen aus der Emp-Tabelle darin zu speichern.
CREATE TABLE BackUp (
Id INT NOT NULL,
Name VARCHAR(255),
Salary INT NOT NULL,
Location VARCHAR(255)
);
Die folgende Abfrage erstellt einen Trigger für die Abfragetabelle DELETE mit dem Namen Emp. Es speichert die gelöschten Zeilen vonEmp zur Tabelle Backup.
ij> CREATE TRIGGER my_trigger
AFTER DELETE ON Emp
REFERENCING OLD AS oldRow
FOR EACH ROW MODE DB2SQL
INSERT INTO BackUp
VALUES (oldRow.Id, oldRow.Name, oldRow.Salary, oldRow.Location);
Löschen Sie nun eine Zeile aus der Emp-Tabelle als -
ij> Delete From Emp where Name = 'Kalyan';
1 row inserted/updated/deleted
ij> Delete From Emp where Name = 'Amit';
1 row inserted/updated/deleted
Wenn Sie die BackUp-Tabelle überprüfen, können Sie die darin gelöschten Zeilen beobachten.
ij> select * from BackUp;
ID |NAME |SALARY |LOCATION
-------------------------------------------------------------------------
2 |Kalyan |40000 |Vishakhapatnam
1 |Amit |30000 |Hyderabad
2 rows selected
Auslöser löschen
Sie können einen Trigger in Derby mit der Anweisung DROP TRIGGER löschen.
Syntax
Es folgt die Syntax der DROP TRIGGER-Abfrage -
ij> Drop trigger tigger_name;
Beispiel
Das folgende Beispiel löscht den oben erstellten Trigger my_trigger -
ij> Drop trigger my_trigger;
0 rows inserted/updated/deleted
JDBC-Beispiel
Das folgende JDBC-Programm erstellt und löscht Trigger in Derby.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Triggers_Example {
public static void main(String args[]) throws SQLException, ClassNotFoundException {
//Registering the driver
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
//Getting the Connection object
String URL = "jdbc:derby:TestDataBase;create=true";
Connection conn = DriverManager.getConnection(URL);
//Creating the Statement object
Statement stmt = conn.createStatement();
//Creating the Emp table
stmt.execute("CREATE TABLE Emp ( "
+ "Id INT NOT NULL, "
+ "Name VARCHAR(255), "
+ "Salary INT NOT NULL, "
+ "Location VARCHAR(255))");
//Insert values in to the EMp table
String query = "INSERT INTO Emp(Id, Name, Salary, Location) VALUES \r\n"
+"(1, 'Amit', 30000, 'Hyderabad'), "
+ "(2, 'Kalyan', 40000, 'Vishakhapatnam'), "
+ "(3,'Renuka', 50000, 'Delhi'), "
+ "(4, 'Archana', 15000, 'Mumbai'), "
+ "(5, 'Trupthi', 45000, 'Kochin')";
stmt.execute(query);
//Creating the BackUp table
stmt.execute("CREATE TABLE BackUp ( "
+ "Id INT NOT NULL, "
+ "Name VARCHAR(255), "
+ "Salary INT NOT NULL, "
+ "Location VARCHAR(255))");
//Creating a trigger
String createTrigger = "CREATE TRIGGER my_trigger "
+ "AFTER DELETE ON Emp "
+ "REFERENCING OLD AS oldRow "
+ "FOR EACH ROW MODE DB2SQL "
+ "INSERT INTO BackUp "
+ "VALUES (oldRow.Id, oldRow.Name, oldRow.Salary, oldRow.Location)";
stmt.execute(createTrigger);
System.out.println("Trigger created");
//Deleting records from Emp table
stmt.executeUpdate("Delete From Emp where Name = 'Kalyan'");
stmt.executeUpdate("Delete From Emp where Name = 'Amit'");
//Getting the contents of BackUp table
ResultSet rs = stmt.executeQuery("SELECT * from BackUp");
while(rs.next()){
System.out.println(rs.getInt("Id"));
System.out.println(rs.getString("Name"));
System.out.println(rs.getString("Salary"));
System.out.println(rs.getString("Location"));
System.out.println(" ");
}
}
}
Ausgabe
Bei Ausführung des obigen Programms wird die folgende Ausgabe generiert:
Trigger created
2
Kalyan
40000
Vishakhapatnam
1
Amit
30000
Hyderabad