FrontPage > DataBase > PostgreSQL > PL/pgSQL

PostgreSQL PL/pgSQL

PostgreSQLのデータベース内にて動作するプログラム
トリガー登録する事で「INSERT、UPDATE、DELETE」時に動作させることが可能。

CREATE OR REPLACE FUNCTION [関数名]() RETURNS [戻り値] AS $[関数名]$
  DECLARE
    -- 変数宣言
    -- [変数名] [型];
    -- [変数名] [テーブル名].[項目名]%TYPE;
    -- [(構造体)変数名] [テーブル名]%ROWTYPE;
  BEGIN
    -- 各種処理
    
    -- 戻り値
    RETURN [戻り値];
  END;
$[関数名]$ LANGUAGE 'plpgsql';

※「$[関数名]$ 〜 $[関数名]$」は、「' 〜 '」の代わり(※1)「$$ 〜 $$」でもOK
※1:その場合BEGIN内の「'[文字列]'」(文字表記)は、「' -> ''」と記載が必要。

コメント

-- [コメント]"--" 以降をコメント化
/* [コメント] */指定範囲をコメント化


DECLARE

PL/SQL内で使用する変数の宣言

変数名 [ CONSTANT ] 型 [ NOT NULL ] [ DEFAULT | := 既定値 ];
[変数名] [型]指定した型で変数を作成
[変数名] [テーブル名]%ROWTYPE;テーブルと同じ構造体変数を作成
[変数名] [ビュー名]%ROWTYPE;ビューと同じ構造体変数を作成
[変数名] RECORD;SELECTと同じ構造を作成(FORループ内のみ)
[変数名] [テーブル名].[項目名]%TYPE;テーブルの項目と同じ型を作成
[変数名] [ビュー名].[項目名]%TYPE;ビューの項目と同じ型を作成
[変数名] [変数名]%TYPE;事前に宣言した「変数」と同じ型を作成

BEGIN

PL/SQLプログラム本体

IF [条件] THEN [一致時の処理] END IF条件分岐
IF [条件] THEN [一致時の処理] ELSE [不一致時の処理] END IF条件分岐
CASE [変数] WHEN [条件] THEN [処理] ... ELSE [処理] END CASE;多重判定
LOOP [処理] END LOOP;ループ処理(永久ループ)
WHILE [条件] LOOP [処理] LOOP;ループ処理(条件が「TRUE」時のみループ)
FOR [変数] IN [データ(SELECTなど)] LOOP [処理] LOOP;ループ処理(データの個数回分ループ)
EXIT;ループ終了
EXIT [ラベル];指定ラベルのループ終了
EXIT [ラベル] WHEN [条件];条件ループ終了


トリガ時のみ使用出来る変数

NEWレコードデータ型変更後行データ(INSERT、UPDATE)
OLDレコードデータ型変更前行データ(UPDATE、DELETE)
TG_NAMENAME型トリガの名前
TG_WHENTEXT型'BEFORE':変更前トリガー、'AFTER':変更後トリガー
TG_LEVELTEXT型'ROW':、'STATEMENT':
TG_OPTEXT型'INSERT':挿入トリガー、'UPDATE':更新トリガー、'DELETE':削除トリガー
TG_RELIDOID型トリガー呼出対象のテーブルのオブジェクトID
TG_RELNAMENAME型トリガー呼出対象のテーブル名
TG_NARGS整数型トリガプロシージャの引数の数
TG_ARGV[]TEXT配列型トリガプロシージャの引数


デバッグ


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-04-20 (火) 17:30:10