Apache Derby-트리거
데이터베이스에서 트리거는 이벤트가 발생할 때마다 실행되는 명령문 / 코드입니다. 테이블의 특정 이벤트에 대한 트리거를 생성하면 이벤트가 발생할 때마다 트리거에 지정된 코드가 실행됩니다. 단일 테이블에 여러 트리거를 만들 수 있습니다.
이 장에서는 Apache Derby를 사용하여 트리거를 만들고 삭제하는 방법을 설명합니다.
트리거 만들기
CREATE TRIGGER 문을 사용하여 Derby에서 트리거를 작성할 수 있습니다.
통사론
다음은 CREATE TRIGGER 쿼리 구문입니다.
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
예
아래와 같이 Derby에 Emp라는 테이블을 만들었다 고 가정 해 보겠습니다.
CREATE TABLE Emp (
Id INT NOT NULL,
Name VARCHAR(255),
Salary INT NOT NULL,
Location VARCHAR(255) );
그리고 거기에 5 개의 행을 삽입했습니다.
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');
BackUp이라는 다른 테이블이 있고 Emp 테이블에서 삭제 된 행을 여기에 저장하려는 경우.
CREATE TABLE BackUp (
Id INT NOT NULL,
Name VARCHAR(255),
Salary INT NOT NULL,
Location VARCHAR(255)
);
다음 쿼리는 DELETE 쿼리 테이블에 트리거를 만듭니다. Emp. 삭제 된 행을 저장합니다.Emp 테이블 백업에.
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);
이제 Emp 테이블에서 행을 삭제하십시오.
ij> Delete From Emp where Name = 'Kalyan';
1 row inserted/updated/deleted
ij> Delete From Emp where Name = 'Amit';
1 row inserted/updated/deleted
BackUp 테이블을 확인하면 삭제 된 행을 볼 수 있습니다.
ij> select * from BackUp;
ID |NAME |SALARY |LOCATION
-------------------------------------------------------------------------
2 |Kalyan |40000 |Vishakhapatnam
1 |Amit |30000 |Hyderabad
2 rows selected
트리거 삭제
DROP TRIGGER 문을 사용하여 Derby에서 트리거를 삭제할 수 있습니다.
통사론
다음은 DROP TRIGGER 쿼리의 구문입니다.
ij> Drop trigger tigger_name;
예
다음 예제는 위에서 생성 된 my_trigger 트리거를 삭제합니다.
ij> Drop trigger my_trigger;
0 rows inserted/updated/deleted
JDBC 예
다음 JDBC 프로그램은 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(" ");
}
}
}
산출
위의 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.
Trigger created
2
Kalyan
40000
Vishakhapatnam
1
Amit
30000
Hyderabad