문제

오류가 발생하는 다음 쿼리가 있습니다 ORA-00905: missing keyword. 지난 몇 시간 동안 지속적인 노력에도 불구하고 구문을 찾을 수 없었습니다. 도와주세요.

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

당시 문 안에있는 절에서 사용할 수 없습니까?

도움이 되었습니까?

해결책

이제 질문을 편집 했으므로 DCTM_VENDOR_SCH_UNLOCK_DTLS에서 CATEY_ID 및 TEMPLATE_ID를 찾으려고하는 것처럼 보입니다. 다음이 당신을 위해 일합니까?

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
)

다른 팁

이것은 실제로 허용되는 곳 이후의 조항에 관한 것이 아닙니다. 표현식

a.category_id IN (SELECT ...)

참 또는 거짓으로 평가합니다. 당신의 진술

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

a.template_id와 마이너스 부호와 그 참 또는 거짓을 연결하려고합니다. Oracle SQL에는 부울 유형이 없으므로 불가능합니다. 실제로 연결하고 싶은 것에 대해 생각해보십시오.

편집 : 이제 괄호를 설정 했으므로 Select 문에서 발생하는 다른 문자열과 문자열을 비교합니다. 지금까지 괜찮습니다. 그러나 여전히 :이 모든 것은 숫자가 아닌 부울로 평가됩니다. 첫 번째는 숫자 (1), 두 번째는 부울 (참 또는 거짓)을 초래합니다. Oracle SQL에는 부울 유형이 없으므로 표현식은 파서에게 의미가 없으며 구문 오류가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top