2013-09-06 24 views
6

Po uruchomieniu następującego polecenia z określonej funkcji, pojawia się błąd "WYKONAJ WYBORU ... INTO nie jest zaimplementowane". Czy to oznacza, że ​​konkretne polecenie nie jest dozwolone (np. "WYBIERZ ... NA")? Czy to znaczy, że robię coś nie tak? Rzeczywisty kod powodujący błąd znajduje się poniżej. Przepraszam, jeśli odpowiedź już tu jest, jednak wyglądałem i nie mogłem znaleźć tego konkretnego błędu. Z góry dzięki ... Na co warto biegnę 8.4.7PostgreSQL BŁĄD: WYKONAJ WYBORU ... INTO nie jest zaimplementowana

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; 

Odpowiedz

7

INTO jest niejednoznaczne w tym przypadku zastosowania, a następnie jest zabronione.

Zamiast tego można użyć 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

To zdecydowanie się udało. Jest więcej niż jeden sposób na skórze kota! Dziękuję za wskazanie tego. :-) –