PL/pgSQL入門ページに戻る
PL/pgSQLの記述構造 †
「PL/pgSQLとは?」で簡単なPL/pgSQLを実行してみました。
このサンプルをもとに記述構造について以下に記します。
お約束 †
当サイトに記載されている会社名、製品名などは一般に各社または団体の商標または登録商標です。
当サイトの資料により直接的および間接的障害が生じても一切責任を負いませんので、あらかじめご了承ください。
自己責任のもとで本資料をご利用ください。
CREATE FUNCTION .. DECLARE .. BEGIN .. END .. LANGUAGE plpgsql †
PL/pgSQLの構造についての詳細は、PostgreSQLサイトにあるドキュメントを参照してください。
www.postgresql.jpへのリンク
PL/pgSQLの構造説明 †
以下にPL/pgSQLの構造を記します。
CREATE FUNCTION ファンクション名() RETURNS 返却する変数の型 AS $$
DECLARE
変数などを宣言
BEGIN
処理を記述
以下のように副ブロックも記述可能
DECLARE
変数などの定義
BEGIN
処理を記述
END;
処理を記述
RETURN 返却値;
END;
$$ LANGUAGE plpgsql;
上記にPL/pgSQLの記述構造を簡単に記しました。
- CREATE FUNCTIONで関数名を宣言
- DECLARE .. BEGIN の間で変数などを宣言
- BEGIN .. END の間で処理を記述
helloworld.sqlの説明 †
「PL/pgSQLとは?」で公開している、helloworld.sqlを説明してみます。
CREATE OR REPLACE FUNCTION helloworld()
RETURNS
TEXT
AS $$
DECLARE
msg text := 'Hello world!';
BEGIN
RAISE INFO '%', msg;
RETURN msg;
END
$$ LANGUAGE plpgsql
;
- CREATE OR REPLACE FUNCTION で helloworld を関数名として宣言しています。
OR REPLACEを記述している理由は、本ソースを修正し再登録したときに、DROPコマンドが不要になるからです。
- RETURNS
返却する型をTEXTと指定してます。
上記のPL/pgSQLの構造説明とRETURNSの位置が違いますが、改行せずに記述するかしないかの違いです。
見やすい方を選べばよいでしょう。
動作は全く同じになります。
- DECLARE .. BEGIN
TEXT型のmsg変数を宣言し、'Hello world!' の文字列を指定してます。
- BEGIN .. END
Hello world! メッセージの表示とクエリーの結果(本関数の実行結果)としてmsg(='Hello world!')を返却しています。
まとめ †
- CREATE FUNCTION .. DECLARE .. BEGIN .. END .. LANGUAGE plpgsql の記述になる。
- DECLARE後、変数などの宣言を行う
- BEGIN .. END で処理を記述する
PL/pgSQL入門ページに戻る