2016-05-13 8 views
0

は私の関数はルックスがいかにあるテーブルを返すPostgreSQLの関数を作成する:どのようにパラメータの配列を受け取り、ここで

create or replace function datafabric.test(psi_codes text[]) 
returns table (asset character varying (255), parent_asset character varying (255)) 
as 
$$ 
select asset, parent_asset 
from americas.asset a 
left join americas.prod_int p on a.row_id = p.row_id 
where root_asset_id in (select root_asset_id from americas.asset where p.name = ANY($1)) 
$$ LANGUAGE 'SQL' VOLATILE; 

しかし、問題は、私はこの

ERROR: function datafabric.test() does not exist SQL state: 42883 DURING the CREATION OF THE FUNCTION.

を取得していますということです

この機能は有効ですのでご注意ください。しかし、結果をpgadmin画面に出力したい。私は今それを行うことができません。

助けてください。私はpostgresql 8.3バージョンを使用しています。

+0

'ALTER function'の意図は何ですか?無効な構文です。また、言語名を一重引用符で囲んではいけません。それは識別子です。 –

+0

意図はありません。私は間違ってここに追加しました。それを取り除く。 – Vids

+0

あなたはありがとうございます。私は言語から一重引用符を削除しました。今は動作しますが、ここで私は今得意です。エラー:結果データの宛先がクエリにありません SQLの状態:42601 – Vids

答えて

1

PostgreSQL 8.3は、関数のRETURNS TABLEをサポートしていません。また、引用符なしで関数の言語を指定する必要があります。

あなたは以下を通じて同様の動作を実現することができます

create or replace function 
     datafabric.test(psi_codes text[], 
         OUT asset character varying (255), 
         OUT parent_asset character varying (255)) 
     RETURNS SETOF RECORD as $$ 
select asset, parent_asset 
from americas.asset a 
left join americas.prod_int p on a.row_id = p.row_id 
where root_asset_id in (select root_asset_id from americas.asset where p.name = ANY($1)) 
$$ LANGUAGE SQL VOLATILE; 
関連する問題