在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:
答案 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