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