Frage

Ich habe die folgende Abfrage, die Fehler gibt ORA-00905: missing keyword. Ich konnte die Syntax trotz kontinuierlicher Bemühungen in den letzten Stunden nicht finden. Bitte helfen Sie.

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

Können wir nicht in Klausel in einer dann Anweisung verwenden?

War es hilfreich?

Lösung

Nachdem Sie Ihre Frage bearbeitet haben, sieht es so aus, als würden Sie einfach versuchen, Category_ID und template_id in dctm_vendor_sch_unlock_dtls nachzuschlagen. Funktioniert das folgende für Sie?

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
)

Andere Tipps

Hier geht es nicht um eine In -Klausel, in der er erlaubt ist oder nicht. Der Ausdruck

a.category_id IN (SELECT ...)

bewertet zu wahr oder falsch. Deine Meinung

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

versucht, das wahr oder falsch mit A.Template_id und einem Minuszeichen zu verkettet. Dies ist nicht möglich, da es in Oracle SQL keinen Booleschen Typ gibt. Denken Sie darüber nach, was Sie tatsächlich verkettet möchten.

Bearbeiten: Jetzt, wo Sie Klammern festlegen, vergleichen Sie eine Zeichenfolge mit einer anderen Zeichenfolge, die aus einer SELECT -Anweisung resultiert. In Ordnung so weit. Doch immer noch: All dies bewertet einen Booleschen, nicht auf eine Zahl. Ihre erste führt dann zu einer Nummer (1), Ihre zweite in einem Booleschen (wahr oder falsch). Oracle SQL hat keinen booleschen Typ, daher macht Ihr Ausdruck keinen Sinn für den Parser und Sie erhalten einen Syntaxfehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top