복붙노트

[SQL] 내부 쿼리에 ORDER BY주는 ORA-00907 오른쪽 괄호 누락

SQL

내부 쿼리에 ORDER BY주는 ORA-00907 오른쪽 괄호 누락

나는 쿼리를 테스트하기 위해 노력하고 ORA-00907 오류가 발생하고있다. 나는 오류 때문에 내가 RUN.RN_RUN_ID을 위해 사용하고 내부 쿼리에 믿습니다. 자체 내부 쿼리는 잘 작동하고 나는 내부 쿼리의 결과, 외부 쿼리가 작동 벌금을 제공합니다. 내가 잘못을하고있는 중이 야 무엇에 어떤 통찰력이 많이 주시면 감사하겠습니다.

Select
    RELEASES.REL_NAME AS RELEASE_NAME,
    RELEASE_CYCLES.RCYC_NAME AS CYCLE_NAME,
    TESTCYCL.TC_TESTCYCL_ID AS TEST_INSTANCE_ID,
    TEST.TS_NAME AS TEST_CASE_NAME,
    TEST.TS_USER_26 AS TEST_POST_CONDITIONS,
    TEST.TS_USER_25 AS TEST_PRE_CONDITIONS,
    TEST.TS_TEST_ID AS TEST_CASE_ID,
    TEST.TS_DESCRIPTION AS TEST_CASE_DESCRIPTION,
    TESTCYCL.TC_STATUS  AS TEST_ACTUAL_RESULTS,
    TEST.TS_DEV_COMMENTS AS TEST_CASE_COMMENTS,
    TEST.TS_RESPONSIBLE AS TEST_CASE_AUTHOR,
    TEST.TS_CREATION_DATE AS TEST_CASE_CREATION_DATE,
    TESTCYCL.TC_EXEC_DATE AS EXECUTION_DATE,
    TESTCYCL.TC_EXEC_TIME AS EXECUTION_TIME,
    TESTCYCL.TC_ACTUAL_TESTER AS EXECUTED_BY,
    STEP.ST_ID AS STEP_ID,
    STEP.ST_STEP_NAME AS STEP_NUMBER,
    STEP.ST_DESCRIPTION AS STEP_DESCRIPTION,
    STEP.ST_EXPECTED AS EXPECTED_RESULTS,
    STEP.ST_ACTUAL AS ACTUAL_RESULTS,
    STEP.ST_USER_07 AS STEP_COMMENT,
    STEP.ST_STATUS AS STEP_STATUS,
    STEP.ST_STEP_ORDER AS STEP_ORDER,
    STEP.ST_USER_01 AS STEP_TYPE,
    RUN.RN_RUN_ID AS RUN_ID From ((((((RELEASES JOIN RELEASE_CYCLES
    ON RELEASES.REL_ID = RELEASE_CYCLES.RCYC_PARENT_ID 
    AND RELEASES.REL_NAME = 'XYZ') LEFT JOIN CYCLE
    ON RELEASE_CYCLES.RCYC_ID = CYCLE.CY_ASSIGN_RCYC) LEFT JOIN TESTCYCL
    ON CYCLE.CY_CYCLE_ID = TESTCYCL.TC_CYCLE_ID) LEFT JOIN RUN
    ON TESTCYCL.TC_TESTCYCL_ID = RUN.RN_TESTCYCL_ID) LEFT JOIN TEST
    ON TESTCYCL.TC_TEST_ID = TEST.TS_TEST_ID) LEFT JOIN STEP
    ON RUN.RN_RUN_ID = STEP.ST_RUN_ID) WHERE (TEST.TS_TYPE = 'MANUAL' OR 
    TEST.TS_TYPE  = 'QUICKTEST_TEST' OR TEST.TS_TYPE = 'LR-SCENARIO')
    AND RUN.RN_RUN_ID in(Select max(RUN.RN_RUN_ID) From (((((((RELEASES JOIN RELEASE_CYCLES
    ON  RELEASES.REL_ID = RELEASE_CYCLES.RCYC_PARENT_ID AND RELEASES.REL_NAME = 'XYZ') 
    LEFT JOIN  CYCLE ON RELEASE_CYCLES.RCYC_ID = CYCLE.CY_ASSIGN_RCYC)
    LEFT JOIN TESTCYCL ON CYCLE.CY_CYCLE_ID = TESTCYCL.TC_CYCLE_ID)
    LEFT JOIN RUN ON TESTCYCL.TC_TESTCYCL_ID = RUN.RN_TESTCYCL_ID)
    LEFT JOIN TEST ON TESTCYCL.TC_TEST_ID = TEST.TS_TEST_ID)
    LEFT JOIN STEP ON RUN.RN_RUN_ID = STEP.ST_RUN_ID)
    LEFT JOIN LINK ON STEP.ST_ID  = LINK.LN_ENTITY_ID AND LINK.LN_ENTITY_TYPE = 'STEP')
    WHERE (TEST.TS_TYPE = 'MANUAL' OR TEST.TS_TYPE = 'QUICKTEST_TEST' OR 
    TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965
    ORDER BY TESTCYCL.TC_TESTCYCL_ID)
    ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER

해결법

  1. ==============================

    1.코딩 스타일과 불필요한 중첩 된 괄호 읽고 해석이 정말 열심히합니다. 하지만 일부 의견에 반대, ORA-00907는 항상 괄호의 홀수를 의미하지 않는다 것을 도움을 수행, 그것은 파서가 구제 원인 것보다 일반적인 구문 오류를 표시 할 수 있습니다. 이 경우에는 매우 도움이되지 않습니다.

    코딩 스타일과 불필요한 중첩 된 괄호 읽고 해석이 정말 열심히합니다. 하지만 일부 의견에 반대, ORA-00907는 항상 괄호의 홀수를 의미하지 않는다 것을 도움을 수행, 그것은 파서가 구제 원인 것보다 일반적인 구문 오류를 표시 할 수 있습니다. 이 경우에는 매우 도움이되지 않습니다.

    문제는 당신이에 대해 비교하고있는 하위 쿼리 내에서, 끝에서 두 번째 줄에 ORDER BY 절입니다 :

    ...
    AND RUN.RN_RUN_ID in(Select max(RUN.RN_RUN_ID) From (((((((RELEASES JOIN RELEASE_CYCLES
    ...
    TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965
    ORDER BY TESTCYCL.TC_TESTCYCL_ID)
    ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
    

    마지막 순서는 분명히 허용되지만 그 하위 쿼리에서이 아닙니다. 이 끝나야 그래서 :

    ...
    TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
    ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
    

    내가 스키마를 필요는 없지만, 간단한 데모 세력의 도움이 보여 같은 것을 테스트 할 수 없습니다 :

    select d1.dummy
    from dual d1
    where d1.dummy in (
      select dummy
      from dual d2
      order by d2.dummy
    )
    order by d1.dummy;
    
    Error at Command Line : 6 Column : 3
    Error report -
    SQL Error: ORA-00907: missing right parenthesis
    00907. 00000 -  "missing right parenthesis"
    

    내부 순서로 분리 :

    select d1.dummy
    from dual d1
    where d1.dummy in (
      select dummy
      from dual d2
    )
    order by d1.dummy;
    
    DUMMY
    -----
    X     
    

    오류가 어떤 의미를 만들 않도록 당신이 무엇을 잘못 알면, 대신에 의한 순서의)을보고 기대하고있다; 하지만 정말 당신이 그것을 좁히는 데 도움이되지 않습니다.

    덧붙여,이 오라클 지원 문서 731577.1에서 참조 :

    그것은하지만 중첩 된 하위 쿼리, 인라인 뷰에서 무시 / 허용됩니다. (하지만 ... 여전히 오류가 발생하지 않는 예외가있을 수 있음)

  2. from https://stackoverflow.com/questions/21859866/order-by-with-inner-query-giving-ora-00907-missing-right-parenthesis by cc-by-sa and MIT license