Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Oracle 更新多行的查询问题_Oracle_Oracle11g - Fatal编程技术网

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
)