oracle中怎么判断全为空格_Oracle 触发器中,如果取一个包含空格VARCHAR2类型的字符串,空格后的内容取不到...

Oracle 触发器中,如果取一个包含空格VARCHAR2类型的字符串,空格后的内容取不到!需要用REPLACE(str,' ','')替换掉空格!

今天在写触发器判断一个Varchar2型字符串有没有更改的时候,取新值和旧值的时候,如果字符串中包含了空格,那么空格之后的内容将取不到,我也不知道到底是什么原因。但是这个时候,我需要记录这个字符串的内容,那么,现在我就只能使用REPLACE(str,' ','')来替换掉空格,才可以取到值。

表结构

DESCRIPTION VARCHAR2 1024 备注

触发器(有问题)

DECLARE

historyText TB_EXP_HISTORY.EH_HIS_TEXT%TYPE; /*记录日志的主要信息*/

BEGIN

if (:OLD.DESCRIPTION <> :NEW.DESCRIPTION) or ((:OLD.DESCRIPTION is not null) and (:NEW.DESCRIPTION is null) ) or ((:NEW.DESCRIPTION is not null) and (:OLD.DESCRIPTION is null) ) then /*备注*/

historyText:=concat(historyText,'备注:');

historyText:=concat(historyText,:OLD.DESCRIPTION);

historyText:=concat(historyText,'----->');

historyText:=concat(historyText,:NEW.DESCRIPTION);

historyText:=concat(historyText,';');

end if;

END;

如果按照上面的写法,那么记录到的日志会有个问题,假如我将DESCRIPTION=‘abc def’改为DESCRIPTION=‘abc d’,最后OLD.DESCRIPTION只能取到旧值中的空格之前的值“abc”,显然,只能过滤掉空格来获取完全的值。即完整的代码为:

触发器(没问题)

DECLARE

historyText TB_EXP_HISTORY.EH_HIS_TEXT%TYPE; /*记录日志的主要信息*/

BEGIN

if (:OLD.DESCRIPTION <> :NEW.DESCRIPTION) or ((:OLD.DESCRIPTION is not null) and (:NEW.DESCRIPTION is null) ) or ((:NEW.DESCRIPTION is not null) and (:OLD.DESCRIPTION is null) ) then /*备注*/

historyText:=concat(historyText,'备注:');

historyText:=concat(historyText,replace(:OLD.DESCRIPTION,' ',''));

historyText:=concat(historyText,'----->');

historyText:=concat(historyText,replace(:NEW.DESCRIPTION,' ',''));

historyText:=concat(historyText,';');

end if;

END;

也许,这个问题有其它更简单的方法可以解决,或许是我笨拙,不知道一些原理,但目前,就先这样吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值