★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

19.10. 例

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

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

詳細な説明と、異なる状況での単一引用符をエスケープする方法の例は、Section 19.11.1.1を参照してください。

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

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

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

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

この関数は、二つの text 型のパラメータを受け取り、それらを連結した結果を返します。

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

Example 19-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';