2012-08-16 11 views
22

Quiero usar SELECT INTO para hacer una tabla temporal en una de mis funciones. SELECT INTO funciona en SQL pero no PL/pgSQL.SELECCIONAR ... INTO para crear una tabla en PL/pgSQL

Esta instrucción crea una tabla llamada mitabla (Si orig_table existe como una relación):

SELECT * 
INTO TEMP TABLE mytable 
FROM orig_table; 

pero poner esta función en PostgreSQL, y se obtiene el error: 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; 

que pueda SELECT INTO una variable de tipo record dentro de PL/pgSQL, pero luego tengo que definir la estructura al obtener datos de ese registro. SELECT INTO es realmente simple: crea automáticamente una tabla de la misma estructura de la consulta SELECT. ¿Alguien tiene alguna explicación de por qué esto no funciona dentro de una función?

Parece que SELECT INTO funciona de forma diferente en PL/pgSQL, porque puede seleccionar las variables que ha declarado. Aunque no quiero declarar mi estructura de tabla temporal. Desearía que simplemente creara la estructura automáticamente como lo hace en SQL.

Respuesta

36

Trate

CREATE TEMP TABLE mytable AS 
SELECT * 
FROM orig_table; 

por 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

Gracias! Sabía que había resuelto este problema antes, y recuerdo esa frase de los documentos postgresql. Me había olvidado por completo de CREATE TABLE AS. – nnyby

+0

Eso me dejó totalmente perplejo por un momento, gracias. – mvexel

Cuestiones relacionadas