2017-11-16 8 views
2

に、私はこの線に沿ってのPostgresで関数を作成したいWHERE ...のUSING:Postgresの機能

CREATE OR REPLACE FUNCTION public.getAvailableForms (
    get_form_names TEXT[] 
) RETURNS TABLE (
    id   INTEGER, 
    name  TEXT, 
    location TEXT, 
    created  TIMESTAMP 
) AS $$ 
BEGIN 
    RETURN QUERY 
     SELECT * 
      FROM form 
     WHERE form.name IN get_form_names; 
END; 
$$ LANGUAGE plpgsql 
    SECURITY DEFINER; 

しかし、それはWHERE form.name IN get_form_namesが文法的に間違っていることを私に伝えます。

postgres関数呼び出しで配列変数を使用する方法に関するドキュメントが見つかりません。

とにかく、WHERE ... INで関数引数として渡された配列値を使用することはできますか?

+1

本当に 'select *'をしているのなら、テーブルを出力として宣言する必要はありません。代わりに 'RETURNS TABLE(...)AS'の代わりに' RETURNS SETOF form AS'を実行することができます。これはあなたの問題を示すための原始的な例かもしれませんが、本当に文字通り "フォーム"テーブルからすべてのフィールドを返すのであれば、これは参考になるかもしれません。 – Hambone

答えて

4

使用any

where form.name = any (get_form_names) 

inは、項目の個別のリストのためになるが、anyは、配列のために使用されています。

+0

"in項目の離散リストですが、いずれも配列に使用されています" - 今日、何か新しいことを学んだことがあります:) 私は許されるとすぐに答えを受け入れます –

+1

私はうれしいです。 postgresqlの配列を読んでください。彼らはゲームのチェンジャーです。 – Hambone

関連する問題