如何在 Oracle 的更新查询中使用 if 语句

Posted

技术标签:

【中文标题】如何在 Oracle 的更新查询中使用 if 语句【英文标题】:how to use an if statement in update query in Oracle 【发布时间】:2019-11-07 18:10:20 【问题描述】:

我想在 Oracle 更新中使用 if 语句。以下是我想要达到的条件,我将无法使用 PL/SQL。我想使用更新语句来实现以下结果。

if code like'0001'  then
   code ='0001'
elsif code like'01' then 
   code = 'ok'
else 
   code = 'NOTOK'
end

我尝试了以下更新语句,但不完全是我需要的,只是尝试使用案例进行简单更新..

UPDATE tblname
SET CODE =  CASE
              WHEN CODE not like '01% OR CODE not like '0001% THEN
                'NOTOK'
            END

【问题讨论】:

您要更新codedesc 列吗? OK 逻辑上应该是desc 嗯,Barbaros 是对的,这很令人困惑。在您的伪代码中有code'001''ok''NOTOK',而在您的更新语句中有DESC'DIRECT' 感谢 Barbaros 和 Thorsten 调查,我已更正。 【参考方案1】:

您可以申请多个WHEN ... THEN。第一场比赛获胜,所以它就像你的if / else if一样工作。

UPDATE tblname 
SET code = CASE WHEN code LIKE '0001%' THEN '0001'
                WHEN code LIKE '01%' THEN 'ok'
                ELSE 'NOTOK'
           END;

【讨论】:

谢谢Thorsten,我刚刚找到并尝试过,它也有效。感谢您的支持。【参考方案2】:

看来你想用

UPDATE tblname 
   SET "DESC" = CASE 
                WHEN SUBSTR(CODE,1,2)='01' THEN 
                     'OK' 
                WHEN SUBSTR(CODE,1,4)='0001' THEN 
                     SUBSTR(CODE,1,4)
                ELSE
                     'NOT OK'
                END

desc 是保留关键字。所以,列名不能不加引号。

【讨论】:

非常感谢巴巴罗斯。我努力寻找解决方案 2 小时..

以上是关于如何在 Oracle 的更新查询中使用 if 语句的主要内容,如果未能解决你的问题,请参考以下文章

oracle 如何结束正在运行的语句

如何在更新语句中使用 if 条件

在 Oracle 更新语句中使用子查询而不是表名

Oracle:尝试使用唯一键组合的“更新”语句。卡在 where 子句中

使用 not in 语句 Oracle 更新查询

如何在 UNIX 批处理作业中将备份作为来自 oracle select 语句的插入查询?