PostgreSQL erreur de syntaxe lors de l'utilisation de l'EXÉCUTER en Fonction de
Je suis en train de créer une fonction qui fait référence à une table temporaire dans PostgreSQL 8.4. D'après mes recherches, il semble que le meilleur moyen pour ce faire est d'utiliser le EXECUTE
commande à exécuter ma requête à partir d'une chaîne définie.
Malheureusement, je reçois une étrange erreur de syntaxe lors de la tentative de créer la fonction.
Ma définition de la fonction est la suivante:
CREATE OR REPLACE FUNCTION example() RETURNS void AS $$
EXECUTE 'INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3 from temp_table';
$$ LANGUAGE SQL;
L'erreur que je reçois est:
ERROR: syntax error at or near "'INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3 from temp_table'"
LINE 2: execute 'INSERT INTO table1 (col1, col2, col3) SELECT col1...
Il semble que je reçois la même erreur indépendamment de ce qui est réellement dans la chaîne littérale.
Mes questions sont les suivantes, 1) quelle est la syntaxe correcte pour l'utilisation de l'EXÉCUTION de la fonctionnalité, et 2) est-il une meilleure façon d'écrire une fonction comme celle-ci qui fait référence à une table temporaire?
OriginalL'auteur Mike Deck | 2011-07-28
Vous devez vous connecter pour publier un commentaire.
Je pense que votre problème est la langue que vous utilisez. EXÉCUTER dans le langage SQL:
n'est pas le même que EXÉCUTER en PL/pgSQL.:
Vous êtes à l'aide de SQL EXECUTE (qui exécute une requête préparée) lorsque vous voulez utiliser le PL/pgSQL EXECUTE (qui exécute une chaîne SQL).
Essayez ceci:
Ou, autre exemple, qui semble plus proche de ce que vous semblez essayer de le faire:
Qui permet d'insérer
'pancakes'
dans la table que vous croisez dans latname
argument à la fonction.OriginalL'auteur mu is too short
EXECUTE
est utilisée pour exécuter des requêtes préparées et ne prévoit qu'une déclaration préparée nom comme argument.Si vous essayez d'exécuter une instruction SQL (comme dans votre exemple), il suffit de l'inclure dans le corps de la fonction.
Vérifier la manuel pour plus d'informations à propos de "Langage de Requête (SQL) Fonctions".
Otoh, que si vous essayez de créer un fonctions PL/pgSQL (ce qui n'est pas ce que vous avez indiqué dans votre question), alors vous avez besoin de convertir votre fonction à un Fonctions PL/pgSQL.
OriginalL'auteur Milen A. Radev
C'est un exemple testé par moi-même où je l'utiliser pour lancer un choisir et de mettre le résultat dans un curseur.
1. Créer la table:
2. La création de la fonction:
3. L'exécution de la fonction
select fun_find_people('name', 'Cristian');
select fun_find_people('country', 'Chile');
OriginalL'auteur Cristian