制御構造
制御構造
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;
CREATE FUNCTION HAS_ERROR()
RETURNS VOID AS '
BEGIN
NULL;
RETURN;
END;
' LANGUAGE 'plpgsql';
SELECT HAS_ERROR(); リスト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; 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'; SELECT SAY_A_IS_B('dog', 'animal')
実行結果は次のとおりです。
say_a_is_b
---------------
dog is animal
(1 row) ![]()