TOP をテンプレートにして作成
ホーム
バックアップ
一覧
検索
最終更新
ヘルプ
ログイン
開始行
[[FrontPage]]へ~
-[[リファレンスガイド]]へ~
--[[Firebird SQLリファレンス]]へ~
&br;
----
*Firebird SQLリファレンス:CREATE TRIGGER, ALTER TRIGGER, ...
#contents
----
&br;
&aname(create_trigger);
*CREATE TRIGGER [#odfa4c9c]
トリガを作成します。同時に、それが起動されるタイミング...
この文書は、公開されているIB6のSQLレファレンスを基とし...
**構文 [#n0b6c113]
Firebird 1.5以降:(マルチアクショントリガ機能追加)
CREATE TRIGGER name FOR table
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <multiple_action>
[POSITION number]
AS <trigger_body> terminator
<multiple_action> ::=
<single_action> [OR <single_action> [OR <single_actio...
<single_action> ::= {INSERT | UPDATE | DELETE}
IB6/Firebird 1.0:
CREATE TRIGGER name FOR table [ACTIVE | INACTIVE]
{BEFORE | AFTER} {DELETE | INSERT | UPDATE}
[POSITION number]
AS <trigger_body> terminator
<trigger_body> = [<variable_declaration_list>] <block>
Firebird 1.5以降:(初期化できるようになった)
<variable_declaration_list> =
DECLARE VARIABLE var <datatype> [{'=' | DEFAULT} value];
[DECLARE VARIABLE var <datatype> [{'=' | DEFAULT} val...
IB6/Firebird 1.0:
<variable_declaration_list> =
DECLARE VARIABLE var <datatype>;
[DECLARE VARIABLE var <datatype>; …]
<block> =
BEGIN
<compound_statement>
[<compound_statement> …]
END
<compound_statement> = {<block> | statement;}
<datatype> = SMALLINT | INTEGER | BIGINT | FLOAT | DOUBL...
| {DECIMAL | NUMERIC} [(precision [, scale])]
| {DATE | TIME | TIMESTAMP}
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[(int)] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYI...
&br;
&br;
|引数|説明|h
|name|トリガの名前です。データベース内において一意でなけ...
|table|テーブルまたビューの名前です。指定したテーブル・ビ...
|ACTIVE|INACTIVE|省略可能です。トランザクション終了での...
|~|・ACTIVE : (省略時デフォルト) トリガの操作は有効となり...
|~|・INACTIVE : トリガの操作は有効となりません。|
|BEFORE|AFTER|必須指定です。トリガの起動タイミングを指定...
|~|・BEFORE : 関連操作前を指定します。|
|~|・AFTER : 関連操作後を指定します。|
|~|※関連操作は、DELETE, INSERT, UPDATEのいずれかです。|
|DELETE|INSERT|UPDATE|テーブルに対して指定した操作が行...
|POSITION number|同アクションに対して複数のトリガがあると...
|~|・数値が少ないトリガが先に実行されます。|
|~|・指定を省略した場合、0指定を行ったことと等価となり、...
|~|・この値は複数のトリガ間で連続している必要はありません...
|DECLARE VARIABLE var datatype|トリガ内で使用するローカル...
|~|・var : 変数名で、トリガ内でローカルであり、かつ一意で...
|~|・datatype: ローカル変数のデータ型名です。|
|~|・Firebird1.5以降では、値を初期化出来るようになりまし...
|statement|処理内容を定義する、プロシージャやトリガを記述...
|terminator|SET TERMで変更した終端文字です。通常の文で使...
|~|・トリガ本体の終了を表します。|
|~|・isqlでのみ使用します。|
&br;
**詳細の説明 [#v205c88c]
CREATE TRIGGER により、データベースに新しいトリガを定義...
(訳注:この機能により、テーブルやビューに対して加工を行っ...
&br;
トリガは、アプリケーションなどから直接呼び出されること...
ただし、リードオンリーのビューに対して UPDATE に対する...
&br;
トリガの定義はヘッダと本体の2つで構成されいます。
-ヘッダの定義内容には、以下のようなものがあります。
--トリガの名前。データベース内において、他のオブジェクト...
--トリガが関連付けられるテーブルの名前。
--トリガが実行されるタイミングの指定。
-本体の定義には、以下のものが含まれます。
--必要ならば、ローカル変数と型定義のリスト。Firebird1.5で...
--BEGIN で始まり END で括られる、プロシージャ・トリガ記述...
''重要'' トリガの本体部分の記述では、終端文字としてセミコ...
トリガは、テーブルに関連付けます。テーブルに対するすべ...
ユーザーやプロシージャに対して特権を与えるのと同様に、...
ユーザーがトリガが起動される要因となる操作を行うときに...
-トリガ自体が、すでに特権を所有している場合。
-起動要因を発生させたユーザーが、その要因に対する特権を所...
処理内容を記述するプロシージャ・トリガ記述言語に関して...
Firebird 1.5 以降では、マルチアクショントリガの定義が可...
これは複数の行操作(INSET/UPDATE/DELETE)に対して、同じト...
また、この機能追加に伴い、起動要因となった操作を識別す...
※isqlの場合、SET TRIGGERSによりデータベースに定義されたト...
**用例 [#xad0a59a]
すべて、isqlでの例です。
-トリガSAVE_SALARY_CHANGEは、テーブルEMPLOYEEが更新された...
SET TERM !! ;
CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEE
AFTER UPDATE AS
BEGIN
IF (OLD.SALARY <> NEW.SALARY) THEN
INSERT INTO SALARY_HISTORY
(EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY, PERCE...
VALUES (OLD.EMP_NO, 'now', USER, OLD.SALARY,
(NEW.SALARY - OLD.SALARY) * 100 / OLD.SALARY);
END !!
SET TERM ; !!
-トリガSET_CUST_NOは、テーブルCUSTOMERに新行を追加すると...
SET TERM !! ;
CREATE TRIGGER SET_CUST_NO FOR CUSTOMER
BEFORE INSERT AS
BEGIN
NEW.CUST_NO = GEN_ID(CUST_NO_GEN, 1);
END !!
SET TERM ; !!
-トリガPOST_NEW_ORDERは、テーブルSALESに行が挿入されると...
SET TERM !! ;
CREATE TRIGGER POST_NEW_ORDER FOR SALES
AFTER INSERT AS
BEGIN
POST_EVENT 'new_order';
END !!
SET TERM ; !!
-BFFORE,AFTRE,POSITION指定による実行順序制御の例です。本...
--定義ヘッダです。
CREATE TRIGGER A FOR accounts
BEFORE UPDATE
POSITION 5 … /*Trigger body follows*/
CREATE TRIGGER B FOR accounts
BEFORE UPDATE
POSITION 0 … /*Trigger body follows*/
CREATE TRIGGER C FOR accounts
AFTER UPDATE
POSITION 5 … /*Trigger body follows*/
CREATE TRIGGER D FOR accounts
AFTER UPDATE
POSITION 3 … /*Trigger body follows*/
--次のようにしてテーブルacountが更新(UODATE)されると、以...
UPDATE accounts SET account_status = 'on_hold'
WHERE account_balance <0;
+トリガ B 実行
+トリガ A 実行
+行更新の実行
+トリガ D 実行
+トリガ C 実行
**参照 [#ef83da76]
ALTER EXCEPTION , ALTER TRIGGER , CREATE EXCEPTION , CREA...
これ以上の情報が欲しい場合は、Data Definition Guideの c...
&br;
&aname(alter_trigger);
*ALTER TRIGGER [#t403c3ae]
既存のトリガを変更します。 DSQL,isqlで使用できます&br;
この文書は、公開されているIB6のSQLレファレンスを基とし...
**構文 [#x2201d5e]
Firebird1.5以降:(マルチアクショントリガ機能追加)
ALTER TRIGGER name
[ACTIVE | INACTIVE]
[{BEFORE | AFTER} <multiple_action>]
[POSITION number]
[AS <trigger_body> terminator]
<multiple_action> ::=
<single_action> [OR <single_action> [OR <single_acti...
<single_action> ::= {INSERT | UPDATE | DELETE}
IB6/Firebird 1.0:
ALTER TRIGGER name
[ACTIVE | INACTIVE]
[{BEFORE | AFTER} {DELETE | INSERT | UPDATE}]
[POSITION number]
[AS <trigger_body>] [terminator]
|引数|説明|h
|name|変更を行いたい、既存のトリガ名です。|
|ACTIVE|INACTIVE|省略可能です。トランザクション終了での...
|~|・ACTIVE : (省略時デフォルト) トリガの操作は有効となり...
|~|・INACTIVE : トリガの操作は有効となりません。|
|BEFORE|AFTER|必須指定です。トリガの起動タイミングを指定...
|~|・BEFORE : 関連操作前を指定します。|
|~|・AFTER : 関連操作後を指定します。|
|~|※関連操作は、DELETE, INSERT, UPDATEのいずれかです。|
|DELETE|INSERT|UPDATE|テーブルに対して指定した操作が行...
|POSITION number|同アクションに対して複数のトリガがあると...
|~|・数値が少ないトリガが先に実行されます。|
|~|・指定を省略した場合、0指定を行ったことと等価となり、...
|~|・この値は複数のトリガ間で連続している必要はありません...
|trigger_body|トリガ定義の本体です。プロシージャ・トリガ...
|~|※詳細に関しては、CREATE TRIGGERと同様ですので参照して...
|terminator|SET TERMで変更した終端文字です。通常の文で使...
|~|・トリガ本体の終了を表します。|
|~|・isqlでのみ使用します。|
**詳細の説明 [#pcfd23c3]
ALTER TRIGGER により、既存のトリガの定義を変更できます...
ALTER TRIGGER では次のような変更が可能です。
-ヘッダ情報のみの変更。トリガの活性化設定、アクションとの...
-本体部分のみの変更。ASに続くトリガ処理内容を記述した部分...
-ヘッダと本体両方の変更。この場合は、トリガの再定義と同じ...
Firebird 1.5 以降では、マルチアクショントリガの定義が可...
これは複数の行操作(INSET/UPDATE/DELETE)に対して、同じト...
マルチアクション定義の関連付けのみの変更も可能です。
トリガの変更が出来るのは、作成者、SYSDBAユーザーおよびO...
※テーブルのCHECK制約によって自動的に定義されたトリガを変...
※isqlの場合、SET TRIGGERSによりデータベースに定義されたト...
**用例 [#o6f54197]
すべて、isqlでの例です。
-トリガSET_CUST_NOを非活性化します。
ALTER TRIGGER SET_CUST_NO INACTIVE;
-トリガSET_CUST_NOを変更します。行が追加されたとき、同時...
SET TERM !! ;
ALTER TRIGGER SET_CUST_NO FOR CUSTOMER
BEFORE INSERT AS
BEGIN
NEW.CUST_NO = GEN_ID(CUST_NO_GEN, 1);
INSERT INTO NEW_CUSTOMERS(NEW.CUST_NO, TODAY)
END !!
SET TERM ; !!
**参照 [#gd2d38ad]
CREATE TRIGGER , DROP TRIGGER
これ以上の情報が欲しい場合は、Data Definition Guideの t...
&br;
&aname(drop_procedure);
**DROP TRIGGER [#lfaad852]
データベースより、既存であるユーザー定義のトリガを削除し...
**構文 [#a81a6c88]
DROP TRIGGER name
|引数|説明|h
|name|削除を行いたい、既存のトリガの名前です。|
**詳細の説明 [#q837caf2]
DROP TRIGGER により、ユーザーが定義したトリガをデータベ...
システム定義のトリガやCHECK制約で作成されたトリガは削除...
トリガが有効なトランザクションで使用されている場合、そ...
トリガの削除が出来るのは、作成者、SYSDBAユーザーまたは ...
※ 一時的にトリガを使用しない場合には、ALTER TRIGGER に I...
**用例 [#p9c27e89]
isqlで、トリガの削除を行う例です。
DROP TRIGGER POST_NEW_ORDER;
**参照 [#xc735de2]
ALTER TRIGGER , CREATE TRIGGER
最終行:
[[FrontPage]]へ~
-[[リファレンスガイド]]へ~
--[[Firebird SQLリファレンス]]へ~
&br;
----
*Firebird SQLリファレンス:CREATE TRIGGER, ALTER TRIGGER, ...
#contents
----
&br;
&aname(create_trigger);
*CREATE TRIGGER [#odfa4c9c]
トリガを作成します。同時に、それが起動されるタイミング...
この文書は、公開されているIB6のSQLレファレンスを基とし...
**構文 [#n0b6c113]
Firebird 1.5以降:(マルチアクショントリガ機能追加)
CREATE TRIGGER name FOR table
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <multiple_action>
[POSITION number]
AS <trigger_body> terminator
<multiple_action> ::=
<single_action> [OR <single_action> [OR <single_actio...
<single_action> ::= {INSERT | UPDATE | DELETE}
IB6/Firebird 1.0:
CREATE TRIGGER name FOR table [ACTIVE | INACTIVE]
{BEFORE | AFTER} {DELETE | INSERT | UPDATE}
[POSITION number]
AS <trigger_body> terminator
<trigger_body> = [<variable_declaration_list>] <block>
Firebird 1.5以降:(初期化できるようになった)
<variable_declaration_list> =
DECLARE VARIABLE var <datatype> [{'=' | DEFAULT} value];
[DECLARE VARIABLE var <datatype> [{'=' | DEFAULT} val...
IB6/Firebird 1.0:
<variable_declaration_list> =
DECLARE VARIABLE var <datatype>;
[DECLARE VARIABLE var <datatype>; …]
<block> =
BEGIN
<compound_statement>
[<compound_statement> …]
END
<compound_statement> = {<block> | statement;}
<datatype> = SMALLINT | INTEGER | BIGINT | FLOAT | DOUBL...
| {DECIMAL | NUMERIC} [(precision [, scale])]
| {DATE | TIME | TIMESTAMP}
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[(int)] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYI...
&br;
&br;
|引数|説明|h
|name|トリガの名前です。データベース内において一意でなけ...
|table|テーブルまたビューの名前です。指定したテーブル・ビ...
|ACTIVE|INACTIVE|省略可能です。トランザクション終了での...
|~|・ACTIVE : (省略時デフォルト) トリガの操作は有効となり...
|~|・INACTIVE : トリガの操作は有効となりません。|
|BEFORE|AFTER|必須指定です。トリガの起動タイミングを指定...
|~|・BEFORE : 関連操作前を指定します。|
|~|・AFTER : 関連操作後を指定します。|
|~|※関連操作は、DELETE, INSERT, UPDATEのいずれかです。|
|DELETE|INSERT|UPDATE|テーブルに対して指定した操作が行...
|POSITION number|同アクションに対して複数のトリガがあると...
|~|・数値が少ないトリガが先に実行されます。|
|~|・指定を省略した場合、0指定を行ったことと等価となり、...
|~|・この値は複数のトリガ間で連続している必要はありません...
|DECLARE VARIABLE var datatype|トリガ内で使用するローカル...
|~|・var : 変数名で、トリガ内でローカルであり、かつ一意で...
|~|・datatype: ローカル変数のデータ型名です。|
|~|・Firebird1.5以降では、値を初期化出来るようになりまし...
|statement|処理内容を定義する、プロシージャやトリガを記述...
|terminator|SET TERMで変更した終端文字です。通常の文で使...
|~|・トリガ本体の終了を表します。|
|~|・isqlでのみ使用します。|
&br;
**詳細の説明 [#v205c88c]
CREATE TRIGGER により、データベースに新しいトリガを定義...
(訳注:この機能により、テーブルやビューに対して加工を行っ...
&br;
トリガは、アプリケーションなどから直接呼び出されること...
ただし、リードオンリーのビューに対して UPDATE に対する...
&br;
トリガの定義はヘッダと本体の2つで構成されいます。
-ヘッダの定義内容には、以下のようなものがあります。
--トリガの名前。データベース内において、他のオブジェクト...
--トリガが関連付けられるテーブルの名前。
--トリガが実行されるタイミングの指定。
-本体の定義には、以下のものが含まれます。
--必要ならば、ローカル変数と型定義のリスト。Firebird1.5で...
--BEGIN で始まり END で括られる、プロシージャ・トリガ記述...
''重要'' トリガの本体部分の記述では、終端文字としてセミコ...
トリガは、テーブルに関連付けます。テーブルに対するすべ...
ユーザーやプロシージャに対して特権を与えるのと同様に、...
ユーザーがトリガが起動される要因となる操作を行うときに...
-トリガ自体が、すでに特権を所有している場合。
-起動要因を発生させたユーザーが、その要因に対する特権を所...
処理内容を記述するプロシージャ・トリガ記述言語に関して...
Firebird 1.5 以降では、マルチアクショントリガの定義が可...
これは複数の行操作(INSET/UPDATE/DELETE)に対して、同じト...
また、この機能追加に伴い、起動要因となった操作を識別す...
※isqlの場合、SET TRIGGERSによりデータベースに定義されたト...
**用例 [#xad0a59a]
すべて、isqlでの例です。
-トリガSAVE_SALARY_CHANGEは、テーブルEMPLOYEEが更新された...
SET TERM !! ;
CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEE
AFTER UPDATE AS
BEGIN
IF (OLD.SALARY <> NEW.SALARY) THEN
INSERT INTO SALARY_HISTORY
(EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY, PERCE...
VALUES (OLD.EMP_NO, 'now', USER, OLD.SALARY,
(NEW.SALARY - OLD.SALARY) * 100 / OLD.SALARY);
END !!
SET TERM ; !!
-トリガSET_CUST_NOは、テーブルCUSTOMERに新行を追加すると...
SET TERM !! ;
CREATE TRIGGER SET_CUST_NO FOR CUSTOMER
BEFORE INSERT AS
BEGIN
NEW.CUST_NO = GEN_ID(CUST_NO_GEN, 1);
END !!
SET TERM ; !!
-トリガPOST_NEW_ORDERは、テーブルSALESに行が挿入されると...
SET TERM !! ;
CREATE TRIGGER POST_NEW_ORDER FOR SALES
AFTER INSERT AS
BEGIN
POST_EVENT 'new_order';
END !!
SET TERM ; !!
-BFFORE,AFTRE,POSITION指定による実行順序制御の例です。本...
--定義ヘッダです。
CREATE TRIGGER A FOR accounts
BEFORE UPDATE
POSITION 5 … /*Trigger body follows*/
CREATE TRIGGER B FOR accounts
BEFORE UPDATE
POSITION 0 … /*Trigger body follows*/
CREATE TRIGGER C FOR accounts
AFTER UPDATE
POSITION 5 … /*Trigger body follows*/
CREATE TRIGGER D FOR accounts
AFTER UPDATE
POSITION 3 … /*Trigger body follows*/
--次のようにしてテーブルacountが更新(UODATE)されると、以...
UPDATE accounts SET account_status = 'on_hold'
WHERE account_balance <0;
+トリガ B 実行
+トリガ A 実行
+行更新の実行
+トリガ D 実行
+トリガ C 実行
**参照 [#ef83da76]
ALTER EXCEPTION , ALTER TRIGGER , CREATE EXCEPTION , CREA...
これ以上の情報が欲しい場合は、Data Definition Guideの c...
&br;
&aname(alter_trigger);
*ALTER TRIGGER [#t403c3ae]
既存のトリガを変更します。 DSQL,isqlで使用できます&br;
この文書は、公開されているIB6のSQLレファレンスを基とし...
**構文 [#x2201d5e]
Firebird1.5以降:(マルチアクショントリガ機能追加)
ALTER TRIGGER name
[ACTIVE | INACTIVE]
[{BEFORE | AFTER} <multiple_action>]
[POSITION number]
[AS <trigger_body> terminator]
<multiple_action> ::=
<single_action> [OR <single_action> [OR <single_acti...
<single_action> ::= {INSERT | UPDATE | DELETE}
IB6/Firebird 1.0:
ALTER TRIGGER name
[ACTIVE | INACTIVE]
[{BEFORE | AFTER} {DELETE | INSERT | UPDATE}]
[POSITION number]
[AS <trigger_body>] [terminator]
|引数|説明|h
|name|変更を行いたい、既存のトリガ名です。|
|ACTIVE|INACTIVE|省略可能です。トランザクション終了での...
|~|・ACTIVE : (省略時デフォルト) トリガの操作は有効となり...
|~|・INACTIVE : トリガの操作は有効となりません。|
|BEFORE|AFTER|必須指定です。トリガの起動タイミングを指定...
|~|・BEFORE : 関連操作前を指定します。|
|~|・AFTER : 関連操作後を指定します。|
|~|※関連操作は、DELETE, INSERT, UPDATEのいずれかです。|
|DELETE|INSERT|UPDATE|テーブルに対して指定した操作が行...
|POSITION number|同アクションに対して複数のトリガがあると...
|~|・数値が少ないトリガが先に実行されます。|
|~|・指定を省略した場合、0指定を行ったことと等価となり、...
|~|・この値は複数のトリガ間で連続している必要はありません...
|trigger_body|トリガ定義の本体です。プロシージャ・トリガ...
|~|※詳細に関しては、CREATE TRIGGERと同様ですので参照して...
|terminator|SET TERMで変更した終端文字です。通常の文で使...
|~|・トリガ本体の終了を表します。|
|~|・isqlでのみ使用します。|
**詳細の説明 [#pcfd23c3]
ALTER TRIGGER により、既存のトリガの定義を変更できます...
ALTER TRIGGER では次のような変更が可能です。
-ヘッダ情報のみの変更。トリガの活性化設定、アクションとの...
-本体部分のみの変更。ASに続くトリガ処理内容を記述した部分...
-ヘッダと本体両方の変更。この場合は、トリガの再定義と同じ...
Firebird 1.5 以降では、マルチアクショントリガの定義が可...
これは複数の行操作(INSET/UPDATE/DELETE)に対して、同じト...
マルチアクション定義の関連付けのみの変更も可能です。
トリガの変更が出来るのは、作成者、SYSDBAユーザーおよびO...
※テーブルのCHECK制約によって自動的に定義されたトリガを変...
※isqlの場合、SET TRIGGERSによりデータベースに定義されたト...
**用例 [#o6f54197]
すべて、isqlでの例です。
-トリガSET_CUST_NOを非活性化します。
ALTER TRIGGER SET_CUST_NO INACTIVE;
-トリガSET_CUST_NOを変更します。行が追加されたとき、同時...
SET TERM !! ;
ALTER TRIGGER SET_CUST_NO FOR CUSTOMER
BEFORE INSERT AS
BEGIN
NEW.CUST_NO = GEN_ID(CUST_NO_GEN, 1);
INSERT INTO NEW_CUSTOMERS(NEW.CUST_NO, TODAY)
END !!
SET TERM ; !!
**参照 [#gd2d38ad]
CREATE TRIGGER , DROP TRIGGER
これ以上の情報が欲しい場合は、Data Definition Guideの t...
&br;
&aname(drop_procedure);
**DROP TRIGGER [#lfaad852]
データベースより、既存であるユーザー定義のトリガを削除し...
**構文 [#a81a6c88]
DROP TRIGGER name
|引数|説明|h
|name|削除を行いたい、既存のトリガの名前です。|
**詳細の説明 [#q837caf2]
DROP TRIGGER により、ユーザーが定義したトリガをデータベ...
システム定義のトリガやCHECK制約で作成されたトリガは削除...
トリガが有効なトランザクションで使用されている場合、そ...
トリガの削除が出来るのは、作成者、SYSDBAユーザーまたは ...
※ 一時的にトリガを使用しない場合には、ALTER TRIGGER に I...
**用例 [#p9c27e89]
isqlで、トリガの削除を行う例です。
DROP TRIGGER POST_NEW_ORDER;
**参照 [#xc735de2]
ALTER TRIGGER , CREATE TRIGGER
ページ名:
新規
名前変更
ホーム
一覧
検索
最終更新
バックアップ
ヘルプ
最終更新のRSS