「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)とはテーブルのデータ更新などのタイミングでストアドプロシージャ、ストアドファンクションを実行できるものです。
トリガーには、スキーマ内の別の種類のオブジェクト(表など)と同じ名前を指定できますが、混乱を防ぐネーミング規則を使用することをお薦めします。
Oracleの「トリガー」(trigger)とはテーブルのデータ更新などのタイミングでストアドプロシージャ、ストアドファンクションを実行できるものです。
トリガーには、スキーマ内の別の種類のオブジェクト(表など)と同じ名前を指定できますが、混乱を防ぐネーミング規則を使用することをお薦めします。 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
);
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
);
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 );
表が作成されました。
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 );
表が作成されました。
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
);
CREATE TABLE LOG_TBL(
EVENT VARCHAR2(30) NOT NULL
);
CREATE TABLE LOG_TBL( EVENT VARCHAR2(30) NOT NULL );
操作例
SQL> CREATE TABLE LOG_TBL(
2 EVENT VARCHAR2(30) NOT NULL
3 );
表が作成されました。
SQL> CREATE TABLE LOG_TBL(
2 EVENT VARCHAR2(30) NOT NULL
3 );
表が作成されました。
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;
/
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;
/
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行が作成されました。
SQL> INSERT INTO USER_TBL(USERID,USERNAME,ADDR) VALUES(1001,'USER01','TOKYO');
1行が作成されました。
SQL> INSERT INTO USER_TBL(USERID,USERNAME,ADDR) VALUES(1001,'USER01','TOKYO'); 1行が作成されました。
5.log_tblの内容を確認します
SQL> select * from log_tbl;
EVENT
--------------------------------------------------------------------------------
Insert操作を行いました
SQL> select * from log_tbl;
EVENT
--------------------------------------------------------------------------------
Insert操作を行いました
SQL> select * from log_tbl; EVENT -------------------------------------------------------------------------------- Insert操作を行いました