如何更新所有行的表格特定字段的值?

时间:2015-01-13 10:42:14

标签: sql database oracle oracle10g oracle-sqldeveloper

我是SQL的新手,特别是在Oracle DB中,我对如何更新表的所有记录的特定单个字段值有疑问。

因此,在Oracle DB中,我有一个名为 PROJECT_INFO_STATUS 的非常简单的表格,其格式如下:

ID  STATUS
-------------
0   Closed
1   Active
2   Testing
3   Starting

正如您在上一个代码段中看到的,此表只有两个字段: ID NUMBER )和状态(a的 VARCHAR )。

如何更新所有行,以便ID值为旧ID值+ 1

例如,第一行的ID值( STATUS =已关闭)必须为1(而不是0)。第二行的ID值(** STATUS = Active)必须为2(而不是1)。等等。

如何获取此行为?

3 个答案:

答案 0 :(得分:4)

只需将列值设置为自身加一:

update project_info_status set id = id + 1;

select * from project_info_status;

        ID STATUS    
---------- ----------
         1 Closed     
         2 Active     
         3 Testing    
         4 Started    

如果ID值在另一个表中用作外键,那么您还需要更新该表中的所有值,如果它由参照完整性约束(应该是)控制,那么你' d需要在更新所有相关表时禁用约束,并在数据再次一致时重新启用约束。除非将约束定义为可延迟,否则您可以在同一事务中更新两个表而不禁用约束。

但是如果它是一个密钥,那么它的实际值应该是无关紧要的,你不应该真的需要修改一个合成的主键值。

答案 1 :(得分:1)

update PROJECT_INFO_STATUS 
set ID = ID +1

如果列值不是PKFK

,则可以直接添加列值

答案 2 :(得分:0)

你应该使用更新命令

<强> UPDATE mytable SET new_column = <expr containing old_column>

然后你可以在表格查询

中执行求和