建了一个DML触发器,插入数据的时候触发,但是我在执行插入操作时却报错,不知道怎么回事?求解答。。
下面是触发器的代码
create or replace trigger tr_test_insert before insert on test.tb1 REFERENCING NEW AS NEW for each row begin whq_update(:OLD.INVOICE_NO);--存储过程,其中参数是插入数据的第二列。共8列 end;
/
下面是插入数据的语句
insert into tb1(id,INVOICE_NO,...) values('TEST001','0906-001',...);
下面是报错的信息
ORA-01422 精确获取的列数超过所必须的列数。求解答,,,在这先谢谢大家了
下面是触发器的代码
create or replace trigger tr_test_insert before insert on test.tb1 REFERENCING NEW AS NEW for each row begin whq_update(:OLD.INVOICE_NO);--存储过程,其中参数是插入数据的第二列。共8列 end;
/
下面是插入数据的语句
insert into tb1(id,INVOICE_NO,...) values('TEST001','0906-001',...);
下面是报错的信息
ORA-01422 精确获取的列数超过所必须的列数。求解答,,,在这先谢谢大家了
试过将whq_update(:OLD.INVOICE_NO)的参数改成8个 就是与插入的数据的列数一样,但是也不行。
create or replace PROCEDURE test.my_update
(
a in varchar2
)
is
b varchar2(16) :="";
c number;
d varchar2(16);
e number;
f varchar2(16);
cursor c_t(A varchar2(16)) is select ...where XX=a ;
begin open c_t(a);
loop
fetch c_t into f;
EXIT when c_t%NOTFOUND;
b:=concat(b, detail_invoce)||',';
end loop;
close c_invoice;
b:=substr(b,1,length(b)-1);
select XX into c from xx where XX=b;
select .. into e from ...;
select .. into d from...where C= c and E=e;
update ... where E= e and C=c;
update ... where D=d;
end my_update;这是存储过程代码...
select XX into c from xx where XX=b;
select .. into e from ...;
select .. into d from...where C= c and E=e;
我有做控制的呀,基本后面都有 where rownum=1
恩 我重新检查了一下,有一条没有写 rownum=1 .
在存储过程中,判断是否会返回多行,是根据实际查出来的结果判断的,还是根据语句判断的??
请教....
谢谢!!!
谢谢大家了。