SQL Cas de déclaration de jeter mot-clé manquant erreur Je vais essayer cette requête: Select * from users_t t where case when sysdate <= to_date('20130131', 'yyyymmdd') then t.user_id=1254664 else t.user_id=1259753 End Pourquoi donne-t-il de "ORA-00905: mot-clé manquant erreur"? OriginalL'auteur roshanK | 2013-04-17 oracleoracle10goracle11gsql 4 Vous avez besoin d'un opérateur de comparaison à l'extérieur la case déclaration: Select * from users_t t where (case when sysdate <= to_date('20130131', 'yyyymmdd') then 254664 else 1259753 End) = t.user_id Cependant, vous pouvez écrire ceci sans la case déclaration: select * from users_t t where ((sysdate <= to_date('20130131', 'yyyymmdd') and t.user_id = 254664) or ((sysdate > to_date('20130131', 'yyyymmdd') and t.user_id = 1259753) OriginalL'auteur Gordon Linoff 3 Votre cas n'est pas correct. SELECT * FROM users_t t WHERE t.user_id = CASE WHEN SYSDATE <= TO_DATE('20130131', 'yyyymmdd') THEN 1254664 ELSE 1259753 END Cela permettra d'accomplir votre tâche. Edit: mise en forme améliorée. merci..il fonctionne.. Vous êtes les bienvenus. OriginalL'auteur gustavodidomenico 1 Un CASE instruction SQL renvoie toujours une valeur. Vous avez besoin d'assimiler cette CASE déclaration à quelque chose. Lire plus sur le sujet ici. Vous devez utiliser votre code comme suit: Select * from users_t t where t.user_id = case when sysdate <= to_date('20130131', 'yyyymmdd') then 1254664 else 1259753 End OriginalL'auteur Rachcha 0 La cause de cette erreur est que il n'y a pas de type de données Booléen dans Oracle SQL. (Personnellement, je pense que c'est une énorme erreur.) Retour d'un état est parfaitement valide idée, et il fonctionne même en PL/SQL: declare v_test Boolean; begin v_test := case when 1=1 then 1=1 else 1=2 end; end; / OriginalL'auteur Jon Heller Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'un opérateur de comparaison à l'extérieur la
case
déclaration:Cependant, vous pouvez écrire ceci sans la
case
déclaration:OriginalL'auteur Gordon Linoff
Votre cas n'est pas correct.
Cela permettra d'accomplir votre tâche.
Edit: mise en forme améliorée.
Vous êtes les bienvenus.
OriginalL'auteur gustavodidomenico
Un
CASE
instruction SQL renvoie toujours une valeur. Vous avez besoin d'assimiler cetteCASE
déclaration à quelque chose. Lire plus sur le sujet ici.Vous devez utiliser votre code comme suit:
OriginalL'auteur Rachcha
La cause de cette erreur est que il n'y a pas de type de données Booléen dans Oracle SQL. (Personnellement, je pense que c'est une énorme erreur.)
Retour d'un état est parfaitement valide idée, et il fonctionne même en PL/SQL:
OriginalL'auteur Jon Heller