PL/pgSQL学習ノートの六

4141 ワード

http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html
39.3.1.宣言関数パラメータ
関数に渡すパラメータは$1、$2などの順に類推されたマーカーで命名されます.オプションとして、可読性を高めるために、別名を$nパラメータ名として定義することができます.その後、数字マーカーも別名でパラメータ値を指すことができます.
エイリアスを作成するための2つの方法があります.おすすめの使い方は、CREATE FUNTIONコマンドでパラメータの名前を一つあげます.例えば、
CREATE FUNCTION sales_tax(subtotal real) RETURNS real AS $$
BEGIN
    RETURN subtotal * 0.06;
END;
$$ LANGUAGE plpgsql;
もう一つの方法は、PostgreSQL 8.0の前に、別名を明示的に宣言する唯一の方法である.以下のような宣言文法を採用しています.name ALIAS FOR$n
上記の例はこの方式を採用した後、次のようになります.
CREATE FUNCTION sales_tax(real) RETURNS real AS $$
DECLARE
    subtotal ALIAS FOR $1;
BEGIN
    RETURN subtotal * 0.06;
END;
$$ LANGUAGE plpgsql;
注意してください: 上記の二つの例は全く同じではない.最初の例では、 subtotal 通過できます sales_tax.subtotalを参照してください.しかし、第二の例ではそうはいかない. (内部ブロックにラベルを与えると、ラベル・subtotal方式で指定できます.)
その他の例:
CREATE FUNCTION instr(varchar, integer) RETURNS integer AS $$
DECLARE
    v_string ALIAS FOR $1;
    index ALIAS FOR $2;
BEGIN
    -- some computations using v_string and index here
END;
$$ LANGUAGE plpgsql;


CREATE FUNCTION concat_selected_fields(in_t sometablename) RETURNS text AS $$
BEGIN
    RETURN in_t.f1 || in_t.f3 || in_t.f5 || in_t.f7;
END;
$$ LANGUAGE plpgsql;