第10回:ストアドプロシージャの移行(2) (2/2)

まるごと PostgreSQL!
PostgreSQLとOracleによるデータベース相互移行マニュアル

第10回:ストアドプロシージャの移行(2)
著者:奥畑 裕樹(OKUHATA, Hiroki)   2005/12/9
前のページ  1  2
制御構造

   Oracle、PostgreSQLともに、基本的な制御文は同じものが揃っており、そのまま通用します。
  • IF THEN
  • IF THEN ELSE
  • IF THEN ELSE IF
  • IF THEN ELSIF THEN ELSE
  • LOOP
  • WHILE LOOP
  • FOR LOOP
GOTO文

   ただしPL/pgSQLでは、GOTO文がサポートされていません。しばしばGOTO文は、上述した制御構造では簡単には記述できない場合に使用されます。他の制御構造で代用した場合には、変換に手間取ることがあるでしょう。


RETURN文

   単一の値を返すPL/SQLのストアドファンクションでは、RETURN文が最低1つは必要です。同じように、PL/pgSQLでもRETURN文が1つは必要なことに注意してください。

   一方、PL/SQLのストアドプロシージャでRETURN文を使うとエラーになることに注意してください。これは、PL/SQLのストアドプロシージャでは、OUT系パラメータ(後述)を使って値を返すためです。


NULL文

   OracleではNULL文が使えますが(リスト14)、PostgreSQLではNULL文は許されていません(リスト15)。しかし、NULL文は実質的に何もしない文なので、単純に削除すればOKです。

BEGIN
  NULL;
END;

リスト14:OracleのNULL文

CREATE FUNCTION HAS_ERROR()
  RETURNS VOID AS '
BEGIN
  NULL;
  RETURN;
END;
' LANGUAGE 'plpgsql';

SELECT HAS_ERROR();

リスト15:PostgreSQLのNULL文(エラー)

   リスト15を実行するとエラーになります。


パラメータ

   PostgreSQLは、Oracleのような名前付きパラメータ宣言(リスト16)に直接対応していませんが、ALIAS FORを使えば間接的に対応することができます(リスト17)

CREATE FUNCTION
  SAY_A_IS_B( A VARCHAR2, B VARCHAR2 )
RETURN VARCHAR2 IS
BEGIN
  RETURN A || ' is ' || B;
END;

リスト16:Oracleの名前付きパラメータ宣言

CREATE FUNCTION
  SAY_A_IS_B( TEXT, TEXT )
RETURNS TEXT AS '
DECLARE
  A ALIAS FOR $1;
  B ALIAS FOR $2;
BEGIN
  RETURN A || '' is '' || B;
END;
' LANGUAGE 'plpgsql';

リスト17:PostgreSQLでのALIAS FORの利用

SELECT SAY_A_IS_B('dog', 'animal')
   実行結果は次のとおりです。

  say_a_is_b
---------------
 dog is animal
(1 row)
前のページ  1  2


奥畑 裕樹(OKUHATA, Hiroki)
著者プロフィール
奥畑 裕樹(OKUHATA, Hiroki)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。


INDEX
第10回:ストアドプロシージャの移行(2)
  実行方法の違い
制御構造
PostgreSQLとOracleによるデータベース相互移行マニュアル
第1回 データベース移行
第2回 データの移行(1)
第3回 データの移行(2)
第4回 SQL文の移行(1)
第5回 SQL文の移行(2)
第6回 SSQL文の移行(3)
第7回 ファンクションの移行(1)
第8回 ファンクションの移行(2)
第9回 ストアドプロシージャの移行(1)
第10回 ストアドプロシージャの移行(2)
第11回 ストアドプロシージャの移行(3)
第12回 ストアドプロシージャの移行(4)
第13回 まとめ

人気記事トップ10

人気記事ランキングをもっと見る