|
||||||||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||||||||
| 具体的な例 | ||||||||||||||||||
|
ではここで実際に簡単なトリガをPostgreSQLとMySQLを使ってそれぞれ作成し、個々のケースついて説明します。なお、PostgreSQLのトリガ処理部分はPL/pgSQLにて記述しています。 トリガを作成する対象のテーブルとして図1のようなsampleテーブルを用意します。 ![]() 図1:sampleテーブル sampleテーブルは、データ型char(1)のcol01カラムを持ち、初期状態として3レコードが格納されているものとします。 作成するトリガの名称を「tri_sample」とし、sampleテーブルへのUPDATE文が実行される場合に起動されるものとします。さらに、tri_sampleトリガはAFTERトリガとし、行単位にて起動されるものとします。 tri_sampleの処理内容は、sampleテーブルの更新前col01カラムの値が数値文字の場合のみ、図2のようなlogsampleテーブルに更新前のcol01カラムの値と更新後のcol01カラムの値を挿入します。 図2:logsampleテーブルへの動作 リスト1とリスト2は、それぞれPostgreSQLのトリガの処理部分と定義部分の設定です。 リスト1:PostgreSQLのトリガ処理部分
create function tri_test() returns trigger as $tri_test$
リスト2:PostgreSQLのトリガ定義部分
create trigger tri_sample after update on sample
PostgreSQLでは、まずtri_test()という名称のユーザ定義関数を作成します。このtri_test()のRETURNS句ではTRIGGER型を指定しています。そして、CREATE TRIGGER文のEXECUTE PROCEDURE句にて、事前に作成したユーザ定義関数tri_test()を指定しています。 リスト3は、MySQLの処理部分と定義部分の設定になります。 リスト3:MySQLの処理部分と定義部分の設定
create trigger tri_sample after update on sample for each row
一方のMySQLでは、PostgreSQLのようにCREATE TRIGGER文の中ではEXECUTE PROCEDURE句が使用できません。よって、CREATE TRIGGER文の中にBEGIN-END句を使用した処理部分を記述しています。 PostgreSQL、MySQL共にCREATE TRIGGER文内の「after」はAFTERトリガを、「update」はUPDATE文を対象とすることを、そして「for each row」は行単位であることを意味しています。 トリガの処理部分に関してはこの例は非常に簡単なものなので、PostgreSQL、MySQLともにほぼ同じような記述となっていることがわかると思います。 |
||||||||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||||||||
|
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||


