update mytable set node_index=0 where id in (
SELECT
id
FROM mytable
WHERE
rownum<=10 and PROCS_DT is null
order by CRET_DT,PRTY desc)
这是我得到的错误
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
什么错了?请高手帮忙..我是Oracle 11g的新手
答案 0 :(得分:10)
UPDATE mytable
SET node_index = 0
WHERE rowid IN
(
SELECT rid
FROM (
SELECT rowid AS rid
FROM mytable
WHERE procs_dt IS NOT NULL
ORDER BY
cret_dt, prty
)
WHERE rownum <= 10
)
答案 1 :(得分:4)
您不能在子查询中使用order by子句,如果您认为它没有任何意义,因为您不需要影响更新的顺序。如果您通过查询删除订单应该有效,并且结果与订单允许的结果没有区别。
答案 2 :(得分:2)
我相信您需要删除子查询中的ORDER BY
。行的顺序对IN
操作的逻辑结果毫无意义。
通常,当Oracle发出此错误但您有平衡的括号时,这意味着括号内的部分会出现意外的文本。
编辑以回复评论
在应用ORDER BY之前计算ROWNUM。要做你想做的事,你需要一个嵌套的子查询,所以排序将首先发生。
update mytable set node_index=0 where id in (
SELECT
id
FROM
( SELECT id FROM mytable WHERE procs_dt IS NULL order by CRET_DT,PRTY desc)
WHERE
rownum<=10
)
在这种情况下,ORDER BY
是允许的,因为它确实会影响子查询的结果。