PL/Perl トリガ

PostgreSQL 8.0.0 文書
前のページ | 巻戻し | 第 37章PL/Perl - Perl 手続き言語 | 早送り | 次のページ

# 37.6. PL/Perl トリガ

PL/Perlを使用してトリガ関数を作成する意ことができます。 トリガ関数では、`$_TD`というハッシュへの参照に、現在のトリガイベントに関する情報が含まれています。 以下に`$_TD`というハッシュへの参照のフィールドを示します。 現在、`$_TD`ハッシュ参照を使用することで、トリガ関数の作成にPL/Perlを使用することができます。

`$_TD->{new}{foo}`

  `NEW`の`foo`列値。

`$_TD->{old}{foo}`

  `OLD`の`foo`列値。

`$_TD->{name}`

  呼び出されたトリガの名前。

`$_TD->{event}`

  トリガイベント。 `INSERT`、`UPDATE`、`DELETE`、もしくは、`UNKNOWN`。

`$_TD->{when}`

  トリガがいつ呼び出されたか。 `BEFORE`、`AFTER`、もしくは、`UNKNOWN`。

`$_TD->{level}`

  トリガレベル。 `ROW`、`STATEMENT`、もしくは、`UNKNOWN`。

`$_TD->{relid}`

  トリガの発行元テーブルのOID。

`$_TD->{relname}`

  トリガの発行元テーブルの名前。

`$_TD->{argc}`

  トリガ関数の引数の数。

`@{$_TD->{args}}`

  トリガ関数の引数。 $_TD->{argc}が0の場合は存在しません。

トリガは以下のいずれかを返すことができます。

`return;`

  文を実行します。

`"SKIP"`

  文を実行しません。

`"MODIFY"`

  トリガ関数によって`NEW`行が変更されたことを示します。

以下はトリガ関数の例で、ここまでの説明の一部を例証するものです。

    CREATE TABLE test (
        i int,
        v varchar
    );

    CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
        if (($_TD->{new}{i} >= 100) || ($_TD->{new}{i} <= 0)) {
            return "SKIP";    # INSERT/UPDATEコマンドを取消します。
        } elsif ($_TD->{new}{v} ne "immortal") {
            $_TD->{new}{v} .= "(modified by trigger)";
            return "MODIFY";  # 行を変更し、INSERT/UPDATEコマンドを実行します。
        } else {
            return;           # INSERT/UPDATEコマンドを実行します。
        }
    $$ LANGUAGE plperl;

    CREATE TRIGGER test_valid_id_trig
        BEFORE INSERT OR UPDATE ON test
        FOR EACH ROW EXECUTE PROCEDURE valid_id();

前のページ | ホーム | 次のページ
信頼されたPL/Perlおよび信頼されないPL/Perl | 上に戻る | 制限および存在しない機能