我有以下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。
我该怎么做?
答案 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
分享并享受。