2013-09-06 23 views
6

Wenn ich den folgenden Befehl von einer Funktion ausführen, die ich definiert habe, bekomme ich den Fehler "EXECUTE von SELECT ... INTO ist nicht implementiert". Bedeutet dies, dass der spezifische Befehl nicht erlaubt ist (d. H. "SELECT ... INTO")? Oder bedeutet es nur, dass ich etwas falsch mache? Der eigentliche Code, der den Fehler verursacht, ist unten. Ich entschuldige mich, wenn die Antwort bereits hier ist, aber ich habe gesucht und konnte diesen spezifischen Fehler nicht finden. Vielen Dank im Voraus ... Denn alles, was es wert ist Ich 8.4.7PostgreSQL FEHLER: EXECUTE von SELECT ... INTO ist nicht implementiert

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; 

Antwort

7

INTO läuft, ist nicht eindeutig in diesem Anwendungsfall und dann ist es verboten.

Sie können stattdessen eine CREATE TABLE AS SELECT verwenden.

 
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

Das hat es definitiv getan. Es gibt mehr als eine Möglichkeit, eine Katze zu häuten! Danke, dass du darauf hingewiesen hast. :-) –