Table temporaire postgresql fonction
Je ne peux pas trouver une explication claire de la syntaxe pour créer (et d'utiliser) des tables juste à l'intérieur des calculs d'une fonction. Quelqu'un pourrait-il me donner un exemple de syntaxe s'il vous plaît ?
De ce que j'ai trouvé, j'ai essayé (avec et sans @
avant temp_table
) :
CREATE FUNCTION test.myfunction()
RETURNS SETOF test.out_table
AS $$
DECLARE @temp_table TABLE
(
id int,
value text
)
BEGIN
INSERT INTO @temp_table
SELECT id, value
FROM test.another_table;
INSERT INTO test.out_table
SELECT id, value
FROM @temp_table;
RETURN END
$$ LANGUAGE SQL;
J'obtiens :
D'ERREUR: erreur de syntaxe sur ou près de "DÉCLARER"
LIGNE 5: DECLARE @temp_table TABLE
-
J'ai aussi essayé de CRÉER la TABLE de l'approche proposée ici, de cette façon :
CREATE FUNCTION test.myfunction()
RETURNS SETOF test.out_table
AS $$
CREATE TABLE temp_table AS
SELECT id, value
FROM test.another_table;
INSERT INTO test.out_table
SELECT id, value
FROM temp_table;
$$ LANGUAGE SQL;
Et j'obtiens ceci :
ERREUR: la relation "temp_table" n'existe pas
LIGNE 11: DE temp_table
(Évidemment, je suis conscient de la temp_table n'est pas nécessaire pour ce que je fais dans le code ci-dessus, mais ce n'est pas le point 🙂 => je veux comprendre la syntaxe pour le faire fonctionner)
Où en avez-vous trouver la syntaxe
DECLARE @temp_table TABLE...
?OriginalL'auteur François M. | 2016-03-18
Vous devez vous connecter pour publier un commentaire.
La syntaxe appropriée pour la création d'une table temporaire est
mais vous devez être sûr de tomber de la table temp avant existants de la fonction. Aussi, je vous suggère cette syntaxe:
Ainsi, votre fonction sera comme ceci:
Mais si je peux être gentil, j'aimerais réécrire cette fonction de sorte qu'il est plus correct:
Non testé; laissez-moi savoir si cela échoue.
J'obtiens une erreur de syntaxe en raison de la
CREATE
déclaration. Plus précisément, j'ai le :ERROR: syntax error at or near "create"
//LINE 4: create TEMP TABLE temp_mag_ref_compl AS
//********** Erreur **********
//ERROR: syntax error at or near "create"
//État SQL :42601
//Caractère : 114
ouais, vous avez raison. Je l'ai changé pour ajouter "begin" et "end;" ce Qui devrait éviter l'erreur de syntaxe.
Oh mon dieu, j'ai essayer d'ajouter
BEGIN
etEND
... mais pasBEGIN;
etEND;
(avec des points-virgules;
)... de toute façon, je suis allé avec une solution complètement différente, donc une solution de travail ne sera probablement pas de toute utilisation à moi maintenant (au moins pour le moment), mais je vais tout de même essayer de prendre un peu de temps (demain au travail), à l'essayer et donner de la rétroaction. De toute façon, merci pour l'effort. Aussi, j'ai proposé une modification.Si vous gardez les transactions ouvrir, la table temporaire peuvent persister, en jetant une "table existe déjà erreur".
OriginalL'auteur dizzystar