SAK 図書館
PostgreSQL 編21 - PL/pgSQL、構文書式、制御構造、メッセージ、動的 SQL
■PL/pgSQL
・PL/pgSQL は、Oracle の PL/SQL と違い、ストアドファンクションとして
のみ使用可能である。
・PL/SQL とは違い PL/pgSQL 内ではトランザクションコマンドは使えない。
しかし、ADO - ODBC や JDBC でのトランザクション配下から、呼ばれた
ストアドやトリガーは、ちゃんとロールバック可能である。
実用システムとしては、まったく問題ないと考える。
■構文書式
・PL/pgSQL の作成は、次のようにする。
create function 関数名(引数, ...) returns 戻り値型 as
'
declare
定数 constant 型 := 定数値
変数 alias for $1; -- 引数の別名宣言
変数 型 := 初期値
変数 型 defalut 省略値
変数 テーブル%rowtype;
変数 テーブル.フィールド%type;
変数 record;
rename 変数名 to 新変数名;
一般宣言;
begin
perform 呼び出し関数(引数, ...); -- 関数呼び出し
一般構文;
return 戻り値;
end;
'
language 'plpgsql'
;
・PL/pgSQL の削除は、次のようにする。
drop function 関数名(引数, ...);
■注釈
-- 1 行注釈
/* 注釈開始
*/ 注釈終了
■演算子、関数
・通常の SQL と同等である。
isnull()
is null
not
found
■制御構造
・条件判定は、次のようにする。
if 条件 then
真のときの構文;
else
偽りのときの構文;
end if;
if 条件1 then
条件1 - 真のときの構文;
elsif 条件2 then
条件2 - 真のときの構文;
elsif 条件3 then
条件3 - 真のときの構文;
else
偽りのときの構文;
end if;
・ループ制御は、次のようにする。
<<LABEL>>
loop
構文;
exit; -- 脱出
exit when 条件 -- 脱出条件
exit LABEL -- ラベルへ脱出
end loop;
while 条件 loop
構文;
end loop;
・for ループ制御は、次のようにする。
for カウンタ in 1..10 loop
構文;
end loop;
for カウンタ in reverse 10..1 loop
構文;
end loop;
for レコード/ロー in クエリ loop
構文;
end loop;
■メッセージ出力、エラー発生
・raise で、デバッグメッセージを表示することができる。
バラメタは、% の箇所に埋め込まれ、複数指定することも可能である。
raise debug ''key = %'', rec.key;
|_ debug
notice
execption エラー発生
■動的 SQL 実行
・通常の構文で insert 等は書けるので、普段は使う必要ないが、Oracle と
同じように動的な SQL を実行する場合に使用する。
execute sql;
|_ SQL
drop function instest1();
create function instest1() returns int as
'
declare
q_ char(1) := chr(39);
sql varchar(200);
begin
sql := ''insert into testm values ('' || q_ || ''a001'' || q_ || '', 1, 2, 3)'';
execute sql;
return 0;
end;
'
language 'plpgsql'
;
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料