Question

J'ai la requête suivante qui donne une erreur ORA-00905: missing keyword. Je n'ai pas pu trouver la syntaxe malgré les efforts continus depuis quelques heures. Veuillez aider.

SELECT a.DOCUMENT_CATEGORY,
         a.template_id,
         a.category_id,
         a.REVIEW_CATEGORY,
         a.WITH_BIDS,
         a.WITH_FINAL_DOCUMENTS,
         b.divn_id,
         b.deptt_id,
         a.vdr_id,
         C.DEPARTMENT,
         a.TEMPLATE_TITLE
    FROM DCTM_VDR_REF_DTLS a, DCTM_VDR_REF_MASTER b, VW_DIVN_DIR c
   WHERE     b.DIVN_ID = c.DIVN_CODE
         AND b.DEPTT_ID = c.SECTN_CODE
         AND a.vdr_id = b.vdr_id
         AND (b.REFERENCE_NUMBER, b.APPROVED_ON) IN
                (  SELECT MAX (REFERENCE_NUMBER), MAX (APPROVED_ON)
                     FROM DCTM_VDR_REF_MASTER
                    WHERE     REFERENCE_NUMBER =
                                 (SELECT DISTINCT
                                         NVL (TRIM (MR_NUMBER), TRIM (TENDER_NO))
                                    FROM EILEDMS.EIL_DOCUMENT_SV@EDMS_DBLINK
                                   WHERE     object_name =
                                                'A307-0IC-JA-MR-7960-1030-157-FOA'
                                         AND r_object_type =
                                                'eil_foa_order_pr_doc'
                                         AND (   title = 'FOA'
                                              OR title = 'DRAFT FOA'))
                          AND APPROVED_ON IS NOT NULL
                 GROUP BY DIVN_ID, DEPTT_ID)
         AND REVIEW_CATEGORY <> 'Delete Category'
         AND (CASE (SELECT IS_SCHEDULE_LOCKED
                      FROM DCTM_VENDOR_SCHEDULE
                     WHERE SCH_ID = 359)
                 WHEN 0
                 THEN
                    1
                 WHEN 1
                 THEN
                    (a.template_id || '-' || a.category_id) IN
                       (SELECT template_id || '-' || category_id
                          FROM DCTM_VENDOR_SCH_UNLOCK_DTLS
                         WHERE     APPROVAL = 'Y'
                               AND APPROVAL_UPTO >= SYSDATE
                               AND CONSUMED = 0
                               AND sch_ID = 359)
              END) = 1
ORDER BY c.DEPARTMENT ASC,
         a.TEMPLATE_ID,
         a.SORT_ORDER,
         a.DOCUMENT_CATEGORY ASC

Ne pouvons-nous pas utiliser dans la clause à l'intérieur d'une déclaration alors?

Était-ce utile?

La solution

Maintenant que vous avez édité votre question, il semble que vous essayiez simplement de rechercher catégorie_id et template_id dans dctm_vendor_sch_unlock_dtls. Le suivant fonctionne-t-il pour vous?

then 
(
  SELECT COUNT(*) -- 1 if found, 0 otherwise
    FROM DCTM_VENDOR_SCH_UNLOCK_DTLS
   WHERE     APPROVAL = 'Y'
         AND APPROVAL_UPTO >= SYSDATE
         AND CONSUMED = 0
         AND sch_ID = 359
         AND template_id = a.template_id
         AND category_id = a.category_id
         AND rownum = 1
)

Autres conseils

Il ne s'agit pas vraiment d'une clause dans l'endroit où il est autorisé ou non. L'expression

a.category_id IN (SELECT ...)

évalue à vrai ou faux. Votre déclaration

a.template_id || '-' || a.category_id IN (SELECT ...)

essaie de concaténer ce vrai ou faux avec a.template_id et un signe moins. Ce n'est pas possible, car il n'y a pas de type booléen dans Oracle SQL. Pensez à ce que vous voulez réellement concaténer.

Edit: Maintenant que vous définissez des parenthèses, vous comparez une chaîne avec une autre chaîne résultant d'une instruction SELECT. Bien jusqu'à présent. Mais quand même: tout cela évalue un booléen, pas un nombre. Votre premier entraîne ensuite un nombre (1), votre deuxième dans un booléen (vrai ou faux). Oracle SQL n'a pas de type booléen, donc votre expression n'a aucun sens pour l'analyseur et vous obtenez une erreur de syntaxe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top