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

请帮着看一下这条语句有没有问题
我写一个触发器,编译成功了,但在往表中填写数据时,总是报下面这条语句出错,但我不清楚什么地方有问题

select   dwmc   into   DNAME2   from   dw   where   dwdm   =   substr(:new.dwdm,1,10);


下面是整个的触发器
create   or   replace   trigger   trg_dw
before   INSERT   OR   UPDATE   OR   DELETE   ON   dw
FOR   EACH   ROW
DECLARE
DNAME   VARCHAR2(50);
DNAME1   VARCHAR2(50);
DNAME2   VARCHAR2(50);

BEGIN
IF   INSERTING   THEN
IF   LENGTH(:new.dwdm)=10   THEN
DNAME   := '公司-> '||:new.dwmc;
ELSIF   LENGTH(:new.dwdm)=15   THEN
select   dwmc   into   DNAME2   from   dw   where   dwdm   =   substr(:new.dwdm,1,10);
DNAME   :=   '公司-> '||DNAME2|| '-> '||:new.dwmc;
ELSE
DNAME   :=:new.dwmc;
END   IF;
DNAME1   := '0 '||SUBSTR(:new.dwdm,2,LENGTH(:new.dwdm));
INSERT   INTO   um   (ocode,oname,oorder,displayname)   VALUES(:new.dwdm,:new.dwmc,DNAME1,DNAME);
ELSIF   UPDATING   THEN
IF   LENGTH(:new.dwdm)=10   THEN
DNAME   := '公司-> '||:new.dwmc;
ELSIF   LENGTH(:new.dwdm)=15   THEN
select   dwmc   into   DNAME2   from   dw   where   dwdm   =   substr(:new.dwdm,1,10);
DNAME   :=   '公司-> '||DNAME2|| '-> '||:new.dwmc;
ELSE
DNAME   :=:new.dwmc;
END   IF;
DNAME1   := '0 '||SUBSTR(:new.dwdm,2,LENGTH(:new.dwdm));
UPDATE   um   SET   ocode=:new.dwdm,oname=:new.dwmc,oorder=DNAME1,displayname=DNAME   where   ocode=:old.dwdm;
ELSIF   DELETING   THEN
DELETE   FROM   um   WHERE   ocode=:old.dwdm;
END   IF;
END;


------解决方案--------------------
你把那条语句里面的:new.dwdm用一个变量过渡一下