你的触发器一共用了3处IF THEN。
其中2,3处IF THEN的逻辑讲不通的。
第三个IF THEN嵌套在第二个IF THEN中间,那么就是说
也必须满足substr(CalledPhonenum,1,1)!='0'的条件。
所以永远不会进入(substr(CalledPhonenum,1,1)='0' 
And substr(CalledPhonenum,2,1)!='0')的逻辑中。
那么这段逻辑执行完,Rate=InterRate。
这是一。
第二,substr(CalledPhonenum,1,1)='0'没有任何逻辑处理,
Rate=null,也会导致这个问题。你应该修改为:
       if(substr(CalledPhonenum,1,1)!='0') Then 
         Rate:=CityRate;
       elsIf(substr(CalledPhonenum,1,1)='0' And substr(CalledPhonenum,2,1)!='0') Then 
            Rate:=DomesticRate;
       Else 
            Rate:=InterRate;
       End If;如果还出现这样的现象,我想你可能需要从数据方面着手判断了。