24.4. 例

PL/pgSQL 関数を記述することが簡単であることを示す2,3の関数をここに 示します。もっと複雑な例については、プログラマの方は PL/pgSQL 用の レグレッションテストを参照してください。

PL/pgSQL関数の記述での辛いところは、シングルクォートの扱いです。 CREATE FUNCTION 上の関数のソーステキストはリテ ラルな文字列である必要があります。リテラルな文字列内でのシングル クォートは二重にまたはバックスラッシュでクォートしなければいけませ ん。もっと優雅な方法を探しています。当面mは、下の例のように二重に したシングルクォートを使うべきです。 Postgresの将来のバージョンでこの問題に 対数解決方法は上位互換になるでしょう。

詳細な説明と、異なる状況でのシングルクォートをエスケープする方法の 例は、Section 24.5.1.1を参照してください。

Example 24-2. 整数値をインクリメントする簡単な PL/pgSQL 関数

次の2つの PL/pgSQL 関数は、C言語関数の説明で対応するものと同じで す。この関数は整数をとり、その値を一つ増やして、増や した値を返します。

CREATE FUNCTION add_one (integer) RETURNS integer AS '
    BEGIN
        RETURN $1 + 1;
    END;
' LANGUAGE 'plpgsql';

Example 24-3. 文字列連結の簡単な PL/pgSQL 関数

この関数は二つのtext型の引数をとり、それらを連結して 返します。

CREATE FUNCTION concat_text (text, text) RETURNS text AS '
    BEGIN
        RETURN $1 || $2;
    END;
' LANGUAGE 'plpgsql';

Example 24-4. 複合型を使った PL/pgSQL 関数

この例では、EMP (テーブル) と integer 型をとります。 これはboolean型を返します。EMPテーブルの "salary" フィールドが NULL であるならば、"f" を返します。 一方では、フィールドと integer を比較して、比較の結 果 (t もしくは f)をboolean 型で返します。この PL/pgSQL も C関数の例と同じです。

CREATE FUNCTION c_overpaid (EMP, integer) RETURNS boolean AS '
    DECLARE
        emprec ALIAS FOR $1;
        sallim ALIAS FOR $2;
    BEGIN
        IF emprec.salary ISNULL THEN
            RETURN ''f'';
        END IF;
        RETURN emprec.salary > sallim;
    END;
' LANGUAGE 'plpgsql';