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

上記の例から、トリガーはデータ操作の前または後にコードを実行でき、操作されるデータにアクセスして変更することができることが分かります。これにより、トリガーは複雑な業務ロジックを実装するための強力なツールとなります。

bannerAds