更新多行的查询问题

时间:2013-07-31 06:59:08

标签: oracle oracle11g

我有以下更新查询来设置一些值并控制数据流。但是当我执行下面的查询时,我从condtion(子查询)中得到错误“Too many values”。

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'。

有人可以帮我解决错误问题或提出不同的查询。

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为这只是列数不匹配的问题(2 - MTB_IRN - 而不是1 - MTB_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
)

您不能使用子查询返回比预期更多的字段来where x in (...)

相关问题