2016-09-27 17 views
1

私は、RETURN QUERYに渡される引数をとり、そのデータが基になるビューからフィードインされる関数を持っています。 関数を実行するとゼロの行が得られますが、select文を実行すると結果は得られます。
私の一部は、 関数のパラメータがまったく読み取られていないと考えています。どんな助言/提案も感謝しています。PosgreSQLの関数パラメータが正しく渡されない

create or replace function my_trans(IN inid character) 
RETURNS TABLE(
    a_date timestamp without time zone, 
    pnt_sys character, 
    nval numeric, 
    pnt_type character, 
    gpid integer) 
as $$ 
#variable_conflict use_column 
BEGIN 
    RETURN QUERY 
    SELECT 
      BORN_DATE, 
      MY_SYSTEM, 
      MY_VALUE, 
      MY_TYPE, 
      MY_PAY_ID 
    FROM vw_psr where nid ~* '$1'; 
end; 
$$ language plpgsql 
+2

'(IN inid character varying)'または '(IN inid text)'です。*文字列*引数が必要であるとします。 – joop

+2

また、パラメータ( '$ 1')の配置を引用しないでください。文字通り' '$ 1' 'という文字列を意味します(パラメータに名前を付けたので識別子 'inid'も使用できます)。また、現在の状態では、 'LANGUAGE sql'関数があなたのニーズに適しているかもしれません。 – pozs

+0

@joop ..歓声..それはほとんど問題ではないと思うけど、運がないことを試みました。 – ribbit

答えて

2

あなたの関数と間違って二つあります。

  1. characterを使用していない - 単一引用符で
をパラメータ名を入れないでください
  • 代わりtextまたはvarcharを使用

    あなたの問題とは無関係ですが、シンプルな「SELECT関数」は平易なSQL関数として書かれています。

    パラメータとローカル変数に何らかの接頭辞を使用して、名前と列名の間に名前の衝突がないようにするのも良いコーディング規約です。

  • +0

    あなたの提案に感謝します。それは本当に役に立ちました。 – ribbit

    関連する問題