Oracle - 更新案例,然后其他部分什么都不做

时间:2018-01-03 07:59:22

标签: oracle

在Oracle DB中,有一个名为Details的表。详细信息表数据如下所示。

Name | Age
--------------
 xxx  |  4
 yyy  |  1
 zzz  |  10

要求将年龄从4岁转换为1岁以上1到4而不会影响10岁。我使用下面的查询,这会在Oracle sql开发人员中产生错误。

update details set age= case when age=4 then 1 
when age=1 then 4 end;

尝试下面的查询:

update details set age= case when age=4 then 1 
when age=1 then 4 
else null end;


Error report for both queries:
SQL Error: ORA-01407: cannot update ("DETAILS"."AGE") to NULL
01407. 
*Cause:    
*Action:

1 个答案:

答案 0 :(得分:1)

您可以仅针对年龄为1或4的行

限制更新
update details 
  set age= case 
            when age=4 then 1 
            when age=1 then 4 
           end
where age in (1,4)

这也可以,但你会做不必要的更新

update details 
set age= case 
           when age=4 then 1 
           when age=1 then 4 
           else age 
          end