Postgres si imbriquées dans le cas de la requête
Pourriez-vous dire pourquoi mon suivant ne fonctionne pas dans postgres sql?:
See updated code below
Mise à JOUR:
Je m'attends à la requête de retour "0.30" en tant que float.
Cette construction est seulement pour des fins de test, j'ai quelques complexes des requêtes sur qui dépendent de la condition de la structure... Mais je ne sais pas comment le résoudre..
Résultat est:
ERROR: syntax error at or near "1"
LINE 4: if 1=1 then
Mise à JOUR:
Cette construction apparaît dans une fonction... si je veux faire à la suite:
CREATE FUNCTION f_test(myvalue integer) RETURNS float AS $$
BEGIN
select (
case (select '1')
when '1' then
if 1=1 then
0.30::float
else
0.50::float
end
else
1.00::float
end
);
END;
$$ LANGUAGE plpgsql;
select f_test(1) as test;
Message d'erreur voir ci-dessus.
l'utilisation correcte de la langue, pas besoin de se servir de quelque chose au-delà de pg ici.
définir "ne fonctionne pas". Qu'avez-vous vous attendez, et de ce qui s'est réellement passé.
Qu'est-ce que la sortie réelle que vous attendez?
Mis à jour mon post.
définir "ne fonctionne pas". Qu'avez-vous vous attendez, et de ce qui s'est réellement passé.
Qu'est-ce que la sortie réelle que vous attendez?
Mis à jour mon post.
OriginalL'auteur BvuRVKyUVlViVIc7 | 2010-11-16
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de
IF expr THEN result ELSE result END
syntaxe normale pour les requêtes SQL dans Postgres. Comme il n'est niIF()
de la fonction que dans MySQL, vous devez utiliserCASE
:Non non, c'est pour les procédures stockées. Pour eux, il y en a un dans MySQL, trop, mais pas normal SQL.
Ive mis à jour mon post, j'utilise ce code dans une fonction... donc, il faut travailler?
Non, vous êtes encore à l'intérieur le SÉLECTIONNER. Ce sont les expressions conditionnelles, vous pouvez utiliser dans des requêtes normales: postgresql.org/docs/8.4/static/functions-conditional.html
Ce qui me confond trop pendant un certain temps. PostgreSQL dispose d'un
IF
de contrôle, cependant, c'est uniquement pour une utilisation à l'intérieur des fonctions. Pour les requêtes, vous utiliserCASE
.OriginalL'auteur AndreKR
Je ne sais pas ce que vous essayez d'atteindre avec cette fonction, mais en voici une version de travail.
La fonction renvoie 0,3 si la valeur d'entrée est à 1, sinon il va retourner 1. Edit: Remarque que 0,5 n'est jamais retournée par la fonction.
OriginalL'auteur jmz