用于按顺序更新记录的Oracle更新查询

用于按顺序更新记录的Oracle更新查询,oracle,oracle11g,Oracle,Oracle11g,我在Oracle SQL中有一个表,它的ID是按递增顺序排列的,但是由于编辑,ID中存在一些间隙,例如,ID当前类似于 22 23 24 32 33 44 ...etc 我查看了一篇帖子,提供的解决方案如下: update (select t.*, row_number() over (order by id) as newid) toupdate set id = newid 现在我的问题是: 1我猜上面的查询中缺少From子句 更新的查询: update (selec

我在Oracle SQL中有一个表,它的ID是按递增顺序排列的,但是由于编辑,ID中存在一些间隙,例如,ID当前类似于

22 
23 
24 
32 
33 
44 
...etc
我查看了一篇帖子,提供的解决方案如下:

update (select t.*, row_number() over (order by id) as newid) toupdate
    set id = newid
现在我的问题是: 1我猜上面的查询中缺少From子句

更新的查询:

update (select t.*, 
              row_number() over (order by emp_id) as newid 
       from employee t ) toupdate 
set emp_id = newid; 
2当我运行上面的查询时,它会给我错误数据操作操作,该操作在此视图上不合法

有人能解释一下上述解决方案是如何在这里工作的吗。任何人都可以发布完整的更新查询。谢谢

对于您提到的同一个问题,演示了如何操作:

update employee set emp_id = (
  with tab as (
    select emp_id, rownum r
    from   (select emp_id from employee order by emp_id)
  )
  select r from tab where employee.emp_id = tab.emp_id
);
这很有效。您无法更新包含行号等分析函数的视图-请参阅,查找关于可更新视图的注释。

对于您引用的同一问题,请说明如何执行此操作:

update employee set emp_id = (
  with tab as (
    select emp_id, rownum r
    from   (select emp_id from employee order by emp_id)
  )
  select r from tab where employee.emp_id = tab.emp_id
);
这很有效。您无法更新包含诸如row_number之类的分析函数的视图-请参阅,查找关于可更新视图的注释。

您可以使用合并,但您需要加入emp_id以外的内容,以便更新该列。如果没有其他唯一列,则可以使用rowid:

您可以使用合并,但是您需要加入emp_id以外的内容,因为您想要更新该列。如果没有其他唯一列,则可以使用rowid:


我认为这是最简单的方法:

更新mytable集合id=ROWNUM


我认为这是最简单的方法:

更新mytable集合id=ROWNUM



用谷歌搜索这个错误,它说你正在更新一个视图,那么你的表是表还是视图呢?还有,为什么要设计一些对数字如此重要的东西呢?它是连续的真的重要吗@RegencySoftware他正在更新虚拟视图,即更新选择。。。。某些虚拟视图可以更新,但不能全部更新。我同意你的观点,emp_id编号的差距不应该被认为是重要的。我的问题是从前面提供的解决方案中提出的。当我要求澄清时,我被要求把我的疑问作为一个问题。所以我就这样做了。现在正在寻找解决方案。如果我能了解这种更新,那将是一个很好的学习。在谷歌上搜索那个错误,它表明你正在更新一个视图,那么你的表是表还是视图?还有,为什么要设计一些对数字如此重要的东西呢?它是连续的真的重要吗@RegencySoftware他正在更新虚拟视图,即更新选择。。。。某些虚拟视图可以更新,但不能全部更新。我同意你的观点,emp_id编号的差距不应该被认为是重要的。我的问题是从前面提供的解决方案中提出的。当我要求澄清时,我被要求把我的疑问作为一个问题。所以我就这样做了。现在正在寻找解决方案。这将是伟大的学习,我知道这种更新。感谢这一点,但我正在看的答案,其中获得最多的选票。我想了解戈登想做什么,我想在将来学习。哦,我明白了。我不相信Gordon的解决方案能起作用,因为视图不能包含…行数为的聚合或分析函数。如果你在链接中观察到,我会质疑他们的答案是我应该把它作为一个问题来问,所以我做了。令我惊讶的是,它也得到了2张赞成票,,,:-谢谢托尼的努力,但正如前面提到的,这不是我的问题。我对提供的解决方案提出了一个问题,当被问到时,专家让我将我的问题作为问题发布。所以,谢谢。谢谢你的回答,但我看到的答案是得票最多的。我想了解戈登想做什么,我想在将来学习。哦,我明白了。我不相信Gordon的解决方案能起作用,因为视图不能包含…行数为的聚合或分析函数。如果你在链接中观察到,我会质疑他们的答案是我应该把它作为一个问题来问,所以我做了。令我惊讶的是,它也得到了2张赞成票,,,:-谢谢托尼的努力,但正如前面提到的,这不是我的问题。我对提供的解决方案提出了一个问题,当被问到时,专家让我将我的问题作为问题发布。所以,谢谢。谢谢你的回答,但我看到的答案是得票最多的。我想了解戈登试图做什么,我想在将来学习。我认为戈登的回答是错误的;不知道为什么它会被接受,因为它在Oracle中不起作用。。。在这种情况下,一个评论可能更合适,尽管你最初的评论可能没有完全清楚地表明它不符合书面要求。我在那里提出了一个问题。我肯定不是他错了,就是我/我们把他搞错了。他必须在这里解释。谢谢你,但我正在看得到最多选票的答案。我想了解戈登试图做什么,我想在将来学习。我认为戈登的回答是错误的;不知道为什么它会被接受,因为它在Oracle中不起作用。。。一条评论是公共关系
在这种情况下可能更合适,虽然你最初的一个可能并不完全清楚,它只是没有像写的那样工作。我在那里提出了一个问题。我肯定不是他错了,就是我/我们把他搞错了。他必须在这里解释。