Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORDER BY带有内部查询,ORA-00907缺少右括号_Sql_Oracle - Fatal编程技术网

Sql ORDER BY带有内部查询,ORA-00907缺少右括号

Sql ORDER BY带有内部查询,ORA-00907缺少右括号,sql,oracle,Sql,Oracle,我试图测试一个查询并得到ORA-00907错误。我相信这个错误是由于我用于运行的内部查询。RN\u RUN\u ID内部查询本身工作正常,我给出了内部查询的结果,外部查询工作正常。如果能了解我做错了什么,我将不胜感激 Select RELEASES.REL_NAME AS RELEASE_NAME, RELEASE_CYCLES.RCYC_NAME AS CYCLE_NAME, TESTCYCL.TC_TESTCYCL_ID AS TEST_INSTANCE_ID,

我试图测试一个查询并得到
ORA-00907
错误。我相信这个错误是由于我用于运行的内部查询。RN\u RUN\u 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

编码风格和不必要的嵌套括号使其很难阅读和解释。但与某些注释相反,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     
它希望看到一个
而不是
order by
,因此,一旦您知道错误是什么,这个错误确实有一定的意义;但这并不能真正帮助你缩小范围

顺便提一下,Oracle支持文档731577.1中引用了这一点:

获取
ORA-00907:在子查询中使用
orderby
子句时缺少右括号。删除
ORDER BY
子句后,查询将正常运行


这是错误4944718的预期行为 子查询中的
orderby
不应该起作用,因为行的顺序传递给外部查询,并且没有影响


在内联视图中允许/忽略它,但在嵌套子查询中不允许。(尽管可能会有一些例外情况,它仍然不会抛出错误…

编码样式和不必要的嵌套括号使得这一点很难阅读和解释。但与某些注释相反,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     
它希望看到一个
而不是
order by
,因此,一旦您知道错误是什么,这个错误确实有一定的意义;但这并不能真正帮助你缩小范围

顺便提一下,Oracle支持文档731577.1中引用了这一点:

获取
ORA-00907:在子查询中使用
orderby
子句时缺少右括号。删除
ORDER BY
子句后,查询将正常运行


这是错误4944718的预期行为 子查询中的
orderby
不应该起作用,因为行的顺序传递给外部查询,并且没有影响


在内联视图中允许/忽略它,但在嵌套子查询中不允许。(虽然可能会有例外,但它仍然不会抛出错误…

左括号太多!!near
((((((《发行版》
添加一个右括号。我们不是人工编译器。删除查询并以增量方式添加回段。我总是尽量避免那些主要由查询设计器程序生成的连接的括号。SQL很快变得无法维护。太多左括号!!near
(((((((RELEASES
添加一个结束括号。我们不是人工编译器。删除查询并以增量方式添加回段。对于主要由查询设计器程序生成的联接,我总是尽量避免使用这些括号。SQL很快变得无法维护。谢谢Alex。我删除了内部order by,它工作正常。谢谢Alex。我将内部顺序移除,工作正常。