Je veux utiliser SELECT INTO
pour créer une table temporaire dans l'une de mes fonctions. SELECT INTO
fonctionne en SQL mais pas en PL/pgSQL.
Cette instruction crée une table appelée mytable (If orig_table
existe en tant que relation):
SELECT *
INTO TEMP TABLE mytable
FROM orig_table;
Mais mettez cette fonction dans PostgreSQL, et vous obtenez l'erreur: 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;
Je peux SELECT INTO
une variable de type record
dans PL/pgSQL, mais je dois ensuite définir la structure lors de l'extraction des données de cet enregistrement. SELECT INTO
est vraiment simple - créant automatiquement une table de la même structure que la requête SELECT
. Quelqu'un at-il une explication pour expliquer pourquoi cela ne fonctionne pas dans une fonction?
Il semble que SELECT INTO
fonctionne différemment dans PL/pgSQL, car vous pouvez sélectionner les variables que vous avez déclarées. Cependant, je ne veux pas déclarer ma structure de table temporaire. Je souhaite qu'il crée simplement la structure automatiquement comme il le fait dans SQL.
Essayer
CREATE TEMP TABLE mytable AS
SELECT *
FROM orig_table;
Par http://www.postgresql.org/docs/current/static/sql-selectinto.html
CREATE TABLE AS est fonctionnellement similaire à SELECT INTO. CREATE TABLE AS est la syntaxe recommandée, car cette forme de SELECT INTO n'est pas disponible dans ECPG ou PL/pgSQL, car ils interprètent la clause INTO différemment. De plus, CREATE TABLE AS offre un sur-ensemble des fonctionnalités fournies par SELECT INTO.