2012-08-16 14 views
22

Desidero utilizzare SELECT INTO per creare una tabella temporanea in una delle mie funzioni. SELECT INTO funziona in SQL ma non in PL/pgSQL.SELEZIONA .. INTO per creare una tabella in PL/pgSQL

Questa istruzione crea una tabella denominata MyTable (Se orig_table esiste come una relazione):

SELECT * 
INTO TEMP TABLE mytable 
FROM orig_table; 

ma mettere questa funzione in PostgreSQL, e si ottiene l'errore: ERROR: "temp" is not a known variable

CREATE OR REPLACE FUNCTION whatever() 
RETURNS void AS $$ 
BEGIN 
    SELECT * 
    INTO TEMP TABLE mytable 
    FROM orig_table; 
END; $$ LANGUAGE plpgsql; 

posso SELECT INTO una variabile di tipo record all'interno di PL/pgSQL, ma in seguito devo definire la struttura per ottenere i dati da quel record. SELECT INTO è davvero semplice: crea automaticamente una tabella con la stessa struttura della query SELECT. Qualcuno ha qualche spiegazione sul motivo per cui questo non funziona all'interno di una funzione?

Sembra che SELECT INTO funzioni in modo diverso in PL/pgSQL, perché è possibile selezionare le variabili dichiarate. Non voglio dichiarare la mia struttura temporanea della tabella, però. Mi piacerebbe solo creare la struttura automaticamente come fa in SQL.

risposta

36

Prova

CREATE TEMP TABLE mytable AS 
SELECT * 
FROM orig_table; 

Per http://www.postgresql.org/docs/current/static/sql-selectinto.html

CREATE TABLE AS is functionally similar to SELECT INTO. CREATE TABLE AS is the recommended syntax, since this form of SELECT INTO is not available in ECPG or PL/pgSQL, because they interpret the INTO clause differently. Furthermore, CREATE TABLE AS offers a superset of the functionality provided by SELECT INTO.

+0

Grazie! Sapevo di aver risolto questo problema in passato e ricordo quella frase dei documenti postgresql. Mi ero completamente dimenticato di CREATE TABLE AS. – nnyby

+0

Questo mi ha totalmente bloccato per un po '- grazie. – mvexel

Problemi correlati