|
|
前のページ 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)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。
|
|
|
|