Oracleトリガーの使用例を詳しく解説
Oracleのトリガーは、特定のデータベース操作(挿入、更新、削除など)が行われた際に自動的に実行されるストアド・プロシージャです。トリガーは、データの完全性制約を実現したり、関連するデータを自動的に更新したり、ログを記録するなどの機能に利用することができます。
以下是Oracle触发器使用示例:
表を作成する。
CREATE TABLE employee (
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(100),
salary NUMBER(10, 2),
commission NUMBER(10, 2),
total_salary NUMBER(10, 2)
);
給料合計を計算するトリガーを作成する。
CREATE OR REPLACE TRIGGER calculate_total_salary
BEFORE INSERT OR UPDATE OF salary, commission ON employee
FOR EACH ROW
BEGIN
:NEW.total_salary := :NEW.salary + :NEW.commission;
END;
/
このトリガーでは、BEFOREキーワードはトリガーが実行される操作の前に実行されることを示し、INSERTおよびUPDATEキーワードはトリガーが挿入および更新操作の際に常にトリガーされることを指定しています。OFキーワードはトリガーがsalaryとcommissionの列に注目することを指定しています。FOR EACH ROWキーワードは、各行データに対してトリガー内のコードが実行されることを示しています。
トリガーのコードブロックはPL/SQL言語で書かれており、その中での:NEWは、挿入または更新される行を表す特別なキーワードです。
現在、employeeテーブルにデータを挿入または更新する際、トリガーが自動的に総給与を計算し、その結果をtotal_salary列に保存します。
INSERT INTO employee (id, name, salary, commission) VALUES (1, 'John Doe', 1000, 200);
UPDATE employee SET salary = 1500 WHERE id = 1;
トリガーの効果を検証するためにテーブルを検索することができます。
SELECT * FROM employee;
ID NAME SALARY COMMISSION TOTAL_SALARY
-- -------- ------ ---------- ------------
1 John Doe 1500 200 1700
上記の例から、トリガーはデータ操作の前または後にコードを実行でき、操作されるデータにアクセスして変更することができることが分かります。これにより、トリガーは複雑な業務ロジックを実装するための強力なツールとなります。