Oracle 10.2 SQL pose un défi lorsque vous tentez d'utiliser une « colonne d'expression de cas » dans la clause WHERE. L'erreur "ORA-00904 : "%s : identifiant invalide" est rencontrée en raison de l'ordre logique du traitement des instructions SQL.
Les instructions SQL sont traitées comme suit séquence :
Dans la clause WHERE de la requête d'origine :
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE department = 'SALES'
La colonne 'department', générée par l'expression CASE , n'existe pas encore lors de l'évaluation de la clause WHERE. Par conséquent, la clause WHERE ne peut pas l'utiliser à des fins de comparaison.
Pour surmonter cette limitation, placez la requête dans une sous-requête :
SELECT * FROM ( SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp ) tmp WHERE department = 'SALES' ;
Vous pouvez également dupliquer l'expression CASE dans la clause WHERE :
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END = 'SALES' ;
Dans les cas où la condition de la clause WHERE correspond directement à un numéro de département spécifique, une option simplifiée est possible :
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!