「Oracle」テーブルにinsert構文を実行しトリガー(trigger)を起動するサンプル

環境
Oracle Database 11g Release 11.2.0.1.0 – 64bit Production

構文
CREATE OR REPLACE TRIGGER トリガー名
{BEFORE | AFTER | INSTEAD OF}
{INSERT | UPDATE | DELETE}
ON テーブル名
(FOR EACH ROW)

BEGIN
処理を記述(PL/SQL)
END;
trigger_nameは、スキーマ内のトリガーで一意である必要があります。

トリガーには、スキーマ内の別の種類のオブジェクト(表など)と同じ名前を指定できますが、混乱を防ぐネーミング規則を使用することをお薦めします。
Oracleの「トリガー」(trigger)とはテーブルのデータ更新などのタイミングでストアドプロシージャ、ストアドファンクションを実行できるものです。

使用例
1.テーブルUSER_TBLを作成します
SQL構文

CREATE TABLE USER_TBL (
    CONSTRAINT PK_USER_ARK PRIMARY KEY (USERID),
      USERID VARCHAR2(50) NOT NULL,
      USERNAME VARCHAR2(50) NOT NULL,
      ADDR VARCHAR2(60) NOT NULL
);

操作例

SQL> CREATE TABLE USER_TBL (
  2      CONSTRAINT PK_USER_ARK PRIMARY KEY (USERID),
        USERID VARCHAR2(50) NOT NULL,
  3    4        USERNAME VARCHAR2(50) NOT NULL,
  5     ADDR VARCHAR2(60) NOT NULL
  6  );

表が作成されました。

2.操作ログテーブルを作成します
SQL構文

CREATE TABLE LOG_TBL(
       EVENT VARCHAR2(30) NOT NULL
);

操作例

SQL> CREATE TABLE LOG_TBL(
  2      EVENT VARCHAR2(30) NOT NULL
  3  );

表が作成されました。

3.トリガーを作成します

REATE OR REPLACE TRIGGER ArkTrigger
  /*insert update delete操作後*/
  AFTER INSERT OR UPDATE OR DELETE
  /*対象テーブルを指定*/
  ON USER_TBL FOR EACH ROW
DECLARE
  op  LOG_TBL.EVENT%TYPE;
BEGIN
 /*トリガーの判定文*/
  IF INSERTING THEN
    op := 'Insert操作を行いました';
  ELSIF UPDATING THEN
    op := 'Update操作を行いました';
  ELSIF DELETING THEN
    op := 'Delete操作を行いました';
  END IF;
  
  INSERT INTO LOG_TBL (event) VALUES (op);
END;
/

4.USER_TBLテーブルにINSERT構文を実行します

SQL> INSERT INTO USER_TBL(USERID,USERNAME,ADDR) VALUES(1001,'USER01','TOKYO');

1行が作成されました。

5.log_tblの内容を確認します

SQL> select * from log_tbl;

EVENT
--------------------------------------------------------------------------------
Insert操作を行いました

 

 

Oracle

Posted by arkgame