Pourquoi est-ce que je reçois toujours l'erreur suivante à partir de postgres?
j'ai lu PostgreSQL: Documentation: 8.3: Structures de contrôle . D'abord, j'ai essayé d'exécuter une requête difficile (avec sous-requête), mais j'ai essayé d'exécuter un simple comme celui-ci: p> L'erreur est toujours la même. Qu'est-ce que je fais mal? P> p> Erreur de syntaxe à ou près de "si" code> p>
3 Réponses :
Vous n'interferez pas la structure de contrôle PL / PGSQL dans un anonyme Bloquer ou une fonction PL / PGSQL. P>
pour la version SQL de cette structure de contrôle, voir les docs pour cas code>
. p>
Le cas ne peut pas être utilisé au niveau supérieur, cependant, uniquement dans le cadre d'une requête SQL. En d'autres termes, il ne peut pas être utilisé pour diriger le comportement qui ne fait pas partie d'une autre requête déjà, ce que la question initiale semblait vouloir.
CREATE OR REPLACE FUNCTION test(p int) RETURNS SETOF users AS $$ BEGIN IF p = 1 THEN RETURN QUERY SELECT * FROM users; END IF; RETURN; END; $$ LANGUAGE plpgsql;
Oh, merci pour votre réponse aussi. Non, je cherchais juste comment faire l'une ou l'autre "Sélectionner" en fonction de la condition "si". Donc, comme je l'ai trouvé qu'il n'y a aucun moyen de le faire en simples comme celui-ci si (Sélectionnez ...) = 2 puis sélectionnez ... sinon choisir ... fin si;
En fait si (sélectionnez A de t) = 2 puis null; FIN SI; Travaillerait, le problème est probablement que vous essayez de choisir quelque chose dans un contexte, cela ne renvoie rien. Dans ce cas, Pavel a fait un exemple parfait. Vous pouvez utiliser Renvoi Query Code> en prise en compte, que vous avez défini votre fonction correctement.
Vous n'intégrez pas que pl / pgsql. Ils doivent être enfermés avec Bloc de code anonyme . Exemple pour votre code:
DO $$ BEGIN IF 2 <> 0 THEN select * from users; END IF; END$$;