Pourquoi ai-je toujours l'erreur suivante de Postgres?
syntax error at or near "IF"
J'ai lu PostgreSQL: Documentation: 8.3: Structures de contrôle . J'ai d'abord essayé d'exécuter une requête difficile (avec une sous-requête), mais ensuite j'ai essayé d'exécuter une requête simple comme celle-ci:
IF 2 <> 0 THEN select * from users; END IF;
L'erreur est toujours la même. Qu'est-ce que je fais mal?
IF 2 <> 0 THEN select * from users; END IF;
Vous ne pouvez pas utiliser d'instructions PL/pgSQL en dehors des fonctions de plpgsql. Et si ce fragment provient de la fonction plpgsql, alors c'est aussi un non-sens. Vous ne pouvez pas retourner directement le résultat d'une requête comme le fait T-SQL.
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;
Lorsque vous obtenez un résultat de fonction, vous devez utiliser l'instruction RETURN - plpgsql ne connait que la fonction, il ne prend pas en charge les procédures - donc, SELECT non lié n'a pas de sens.
Vous n'incluez pas ce PL/pgSQL. Ils doivent être entourés de bloc de code anonyme . Exemple pour votre code:
DO $$ BEGIN
IF 2 <> 0 THEN select * from users; END IF;
END$$;