Oracle 更新多行的查询问题
我有下面的更新查询来设置一些值并控制数据流。但是当我执行下面的查询时,我从条件(子查询)中得到错误“太多值”Oracle 更新多行的查询问题,oracle,oracle11g,Oracle,Oracle11g,我有下面的更新查询来设置一些值并控制数据流。但是当我执行下面的查询时,我从条件(子查询)中得到错误“太多值” UPDATE MTB ----- TABLE NAME SET MTB_EXTR_FLAG='N', MTB_ALOC_PROCESS='DC1' WHERE MTB_I IN --- PRIMARY KEY ( SELECT * FROM ( SELECT MTB_I ,ROW_NUMBER() OVER (ORDER BY ROWID) AS RN FROM M
UPDATE MTB ----- TABLE NAME
SET MTB_EXTR_FLAG='N',
MTB_ALOC_PROCESS='DC1'
WHERE MTB_I IN --- PRIMARY KEY
(
SELECT * FROM
(
SELECT MTB_I ,ROW_NUMBER() OVER (ORDER BY ROWID) AS RN
FROM MTB
)
WHERE RN BETWEEN 100 AND 500
)
在这里,我的意图是为一个作业的每个处理选择不同的设置数据。
我想在每次使用不同的数据集运行作业之前设置MTB_EXTR_FLAG='N',MTB_ALOC_PROCESS='DC1'
请有人帮我解决错误问题或提出不同的查询
谢谢。我认为这只是列数不匹配的问题(2-
MTB_I
和RN
-而不是1-MTB_I
):
如果子查询返回的字段比预期的多,则不能执行
,其中x在(…)
。按rowid排序不明智-在表上执行不同操作时,rowid可能会更改。如果不是按rowid,您如何对数据进行排名?我猜您希望在创建行时进行排名。表中是否有“更新日期”列?谢谢Emmanuel。现在,在将“选择*”替换为“选择MTB\u I”后,它就可以工作了
UPDATE MTB
SET MTB_EXTR_FLAG='N',
MTB_ALOC_PROCESS='DC1'
WHERE MTB_I IN --- PRIMARY KEY
(
SELECT MTB_I FROM -- Else RN will be taken !!
(
SELECT MTB_I ,ROW_NUMBER() OVER (ORDER BY ROWID) AS RN
FROM MTB
)
WHERE RN BETWEEN 100 AND 500
)