PL/pgSQL 関数を記述することが簡単であることを示す2,3の関数をここに示します。もっと複雑な例については、プログラマの方は PL/pgSQL 用のリグレッションテストを参照してください。
PL/pgSQL 関数の記述での辛いところは、単一引用符の扱いです。CREATE FUNCTION 上の関数のソーステキストはリテラルな文字列である必要があります。リテラルな文字列内での単一引用符は二重に、または、バックスラッシュでクォートしなければいけません。もっと優雅な方法を探しています。当面は、下の例のように二重にした単一引用符を使うべきです。PostgreSQLの将来のバージョンでこの問題に対する解決方法は上位互換になるでしょう。
詳細な説明と、異なる状況での単一引用符をエスケープする方法の例は、Section 23.11.1.1を参照してください。
Example 23-2. 整数値をインクリメントする簡単な PL/pgSQL 関数
次の2つの PL/pgSQL 関数は、C言語関数の説明で対応するものと同じです。この関数は integer をとり、その値を一つ増やして、増やした値を返します。
CREATE FUNCTION add_one (integer) RETURNS INTEGER AS ' BEGIN RETURN $1 + 1; END; ' LANGUAGE 'plpgsql';
Example 23-3. 文字列連結の簡単な PL/pgSQL 関数
この関数は二つのtext型の引数をとり、それらを連結して返します。
CREATE FUNCTION concat_text (TEXT, TEXT) RETURNS TEXT AS ' BEGIN RETURN $1 || $2; END; ' LANGUAGE 'plpgsql';
Example 23-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';