2013-09-06 72 views
6

私が定義した関数から次のコマンドを実行すると、「EXECUTE of SELECT ... INTOが実装されていません」というエラーが表示されます。これは特定のコマンドが許可されていない(つまり、 "SELECT ... INTO")ことを意味しますか?それとも、私が間違っていることを意味するのでしょうか?エラーを引き起こす実際のコードは以下の通りです。答えが既にここにあるのであれば謝りますが、私は見てこの特定のエラーを見つけることができませんでした。事前のおかげで...それは価値があるものは何でも、私は8.4.7PostgreSQLエラー:SELECT ... INTOのEXECUTEが実装されていません

vCommand = 'select ' || stmt.column_name || ' as id ' || 
      ', count(*) as nCount 
      INTO tmpResults 
      from ' || stmt.table_name || ' 
      WHERE ' || stmt.column_name || ' IN (select distinct primary_id from anyTable 
               WHERE primary_id = ' || stmt.column_name || ') 
      group by ' || stmt.column_name || ';'; 
EXECUTE vCommand; 

答えて

7

INTOを実行しているため、このユースケースで曖昧で、そこに禁止されています。

代わりにCREATE TABLE AS SELECTを使用できます。

 
CREATE OR REPLACE FUNCTION public.f1(tablename character varying) 
RETURNS integer 
LANGUAGE plpgsql 
AS $function$ 
begin 
    execute 'create temp table xx on commit drop as select * from ' 
             || quote_ident(tablename); 
    return (select count(*) from xx); 
end; 
$function$ 

postgres=# select f1('omega'); 
f1 
──── 
    2 
(1 row) 
+0

これは間違いなくそれでした。猫の皮膚には複数の方法があります!それを指摘してくれてありがとう。 :-) –