Je crée ce petit extrait de code simple pendant une journée et je ne trouve pas le problème provoquant l'erreur. Comme le titre indique, je reçois une erreur ora-00905 Mot-clé manquant code> Lorsque vous essayez d'exécuter le code suivant:
SELECT DISTINCT DM.DESCRIPTION AS "AGENCY",
DM.DEPT_NO AS "DEPT NO",
CASE
WHEN VMP.RESERVE_DT IS NULL THEN
NULL
ELSE
VMP.RESERVE_DT
END AS "RESV_DT",
CASE
WHEN VMP.EST_PICKUP_DT IS NULL THEN
NULL
ELSE
VMP.EST_PICKUP_DT
END AS "EST_PKUP_DT",
CASE
WHEN VMP.EST_RETURN_DT IS NULL THEN
NULL
ELSE
VMP.EST_RETURN_DT
END AS "EST_RETN_DT",
VMP.EMP_NAME AS "EMPL_NAME",
VMP.UNIT_NO AS "UNIT_NUMBER",
VMP.RENTAL_CLASS_DESCRIPTION AS "RENT_CLS",
VMP.MP_TICKET_NO AS "MP_TKT_NO"
FROM DEPT_MAIN DM
INNER JOIN VIEW_MPOOL VMP ON VMP.DEPT_ID = DM.DEPT_ID
WHERE CASE
WHEN VMP.EST_PICKUP_DT IS NULL THEN
NULL
ELSE
TRUNC(VMP.EST_PICKUP_DT) = TRUNC(SYSDATE)
END
GROUP BY DM.DESCRIPTION,
DM.DEPT_NO,
CASE
WHEN VMP.RESERVE_DT IS NULL THEN
NULL
ELSE
VMP.RESERVE_DT
END,
CASE
WHEN VMP.EST_PICKUP_DT IS NULL THEN
NULL
ELSE
VMP.EST_PICKUP_DT
END,
CASE
WHEN VMP.EST_RETURN_DT IS NULL THEN
NULL
ELSE
VMP.EST_RETURN_DT
END,
VMP.EMP_NAME,
VMP.UNIT_NO,
VMP.RENTAL_CLASS_DESCRIPTION,
VMP.MP_TICKET_NO
ORDER BY CASE
WHEN VMP.EST_PICKUP_DT IS NULL THEN
NULL
ELSE
VMP.EST_PICKUP_DT
END ASC
3 Réponses :
ici: le commutateur : P> fin code> est après une comparaison et que le boîtier n'est pas comparé contre une valeur. P>
WHERE TRUNC(VMP.EST_PICKUP_DT) = TRUNC(SYSDATE)
Qui peut être simplifié à où tronc (vmp.est_pickup_dt) = trunc (sysdate) code>
@A_HORSE_WITH_NO_NAME correct, j'étais occupé à vérifier la syntaxe et non la sémantique.
Essayez de remplacer ceci: avec: p> Veuillez noter que toute cette expression (et d'autres personnes similaires dans la requête) pourrait être simplifié comme: p> lorsque vmp.est_pickup_dt code> est
null code>,
trunc code> Retournera
null code>, qui ne sera pas égal à
trunc (sysdate) code>. p> p>
@Ezlo Votre réponse était au cou et au cou avec GMB, mais son a montré d'abord alors je lui ai donné la résolution. Vos réponses ont été fonctionnellement identiques, donc j'ai donné à la fois des upvotes. Merci à vous deux pour la réponse rapide.
ne peut pas trouver le problème provoquant l'erreur p>
Bien que je suppose que @ezlo et @a_horse_with_no_name a peut-être trouvé une erreur dans ce cas, je peux proposer une procédure forte> strie> dans le débogage de ces requêtes. P>
Étape 1: Déboguer votre Join- et où- prédicats h1>
Commenter tout dans votre relevé sélectionné, laissez uniquement des jointures, des champs de substitution avec
* code> ou une expression constante. P>
SELECT DM.DESCRIPTION ,DM.DEPT_NO -- ... FROM DEPT_MAIN DM INNER JOIN VIEW_MPOOL VMP ON VMP.DEPT_ID = DM.DEPT_ID WHERE CASE WHEN VMP.EST_PICKUP_DT IS NULL THEN NULL ELSE TRUNC(VMP.EST_PICKUP_DT) = TRUNC(SYSDATE) END GROUP BY DM.DESCRIPTION ,DM.DEPT_NO
J'utilise un processus similaire et il y avait d'autres erreurs résolues avant de poster. J'ai regardé à droite à la déclaration de fin de cause et je n'ai pas vu le problème. Merci pour la suggestion!
Vous n'avez rarement jamais besoin de sélectionner distinct lorsque le groupe par.
Ajoutez quelques données de table d'échantillons et le résultat attendu - tout comme texte formaté, pas d'images. Jetez un coup d'œil à Stackoverflow.com/help/mcve en premier.
Votre expression de cas est inutile:
Case lorsque vmp.reserve_dt est NULL, NULL SINDE SINDE VMP.RESERER_DT END CODE> est identique au
vmp.reserve_dt code>.