SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2024 Y.SAK