日期:2014-05-17  浏览次数:20876 次

一个触发器的问题,在线等待急......
本帖最后由 yangzong20 于 2013-04-26 14:53:48 编辑
我写了一个insert触发器,目的是想在某个表新增记录的时候抓取新增的这条记录莫些字段添加到其他表里去,我运行后发现新增记录的有些字段抓出来是空的,麻烦各位大哥给看看。小弟万分感谢。

CREATE OR REPLACE TRIGGER new_sms
before insert
on CUSTMEMBER FOR EACH ROW
declare
str varchar2(150);
begin
str:='尊敬的'||:NEW.CMNAME||',欢迎您加入VIP会员俱乐部,我们将竭诚为您提供优质的服务,欢迎您拨打客服专线';
--if (length(TRIM(:new.CMMOBILE1)) = 11) then
INSERT INTO YZL_DX_SEND (CDMNO,CMNAME,CONTENT,MOBILE,SB,FS_DATE,send) values(:NEW.CMCUSTID,:NEW.CMNAME,str,:NEW.CMMOBILE1,'3',sysdate,'N');
--END IF;
end;

编译是没出错,但添加记录后发现只有:NEW.CMCUSTID这个字段有值,:NEW.CMNAME,:NEW.CMMOBILE1这两个字段都没值是空的,我添加 CUSTMEMBER 表记录的时候这两个字段是有值的,麻烦各位大哥帮忙看看,小弟万分感谢。




------解决方案--------------------
估计是 str变量定义范围过窄,溢出了吧?
------解决方案--------------------
提供一下new_sms、YZL_DX_SEND 看看
------解决方案--------------------
引用:
提供一下new_sms、YZL_DX_SEND 看看

表结构
------解决方案--------------------
用你的表结构和触发器,测试没有发现问题
测试用例如下:
SQL> insert into CUSTMEMBER(CMMEMID,CMCUSTID,CMNAME,CMMOBILE1)
  2  values('test trigger','CMCUSTID','CMNAME','CMMOBILE1');

已创建 1 行。


SQL> select CMNAME,MOBILE from YZL_DX_SEND;

CMNAME                                                       MOBILE
------------------------ CMNAME                                                       CMMOBILE1