如果列没有包含值,Oracle会连接

时间:2014-09-16 21:01:30

标签: oracle concatenation

我有以下Oracle代码:

update registration set 
    reg_comments=pMessage||decode(reg_reg_int_hld_wait,1,'Was on hold ')||reg_comments
where reg_rid=v_reg_rid;

我想只将reg_comments连接到自身,如果它还没有包含pMessage。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果您只想在reg_comments不包含pMessage时执行此更新,那么我将使用instr函数检查reg_comments是否包含pMessage。

UPDATE registration
SET reg_comments=pMessage
  ||DECODE(reg_reg_int_hld_wait,1,'Was on hold ')
  ||reg_comments
WHERE reg_rid                    =v_reg_rid
AND INSTR(reg_comments, pMessage)= 0 ;

当reg_comments中没有出现substring参数(在本例中为pMessage)时,instr将返回0。

~~~~~~附录~~~~~~~~~~~~~~~~~

如果更新涉及多个列,并且您确实想要更新set子句中where子句中标识的所有记录的所有列,我将使用Bob的方法。

答案 1 :(得分:0)

另一种选择:

update registration
  set reg_comments = CASE
                       WHEN INSTR(reg_comments, pMessage) = 0
                         THEN pMessage ||
                                decode(reg_reg_int_hld_wait, 1, 'Was on hold ') ||
                                reg_comments
                       ELSE
                         reg_comments
                     END
where reg_rid = v_reg_rid

分享并享受。