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 編資料