记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。

oracle 11g ORA-01422实际返回的行数超出请求的行数


insert into te_user (PSN_ID, PSN_ACCOUNT, PSN_PWD, PSN_NAME, PSN_DESC, PSN_LEVEL, HISTORY_PWD1, HISTORY_PWD2, HISTORY_PWD3, TEMP_PWD, BILL_NUM, ISVALUE, SIM, ISMSG_LOGIN, VALU_ETIME, ISMSG, TEMP_PWD_TIME, HISTORY_PWD4, BOTTOMLEFTX, BOTTOMLEFTY, TOPRIGHTX, TOPRIGHTY, STARTTIME, UPDATETIME, SECURITY_FLAG) values ('527be121a32e1', '15908000000', '72IuaAS8Wj, null, null, '1', 'vInaLBzHJ, null, null, null, '9003000000', null, '15908000000', null, 1487590404, null, null, null, 411288728, 110098230, 411455622, 110234034, 1487217447, null, 1)

           

第 1 行出现错误:

ORA-01422: 实际返回的行数超出请求的行数

ORA-06512: 在 "CM.AFTER_INSERTUSER_GROUP", line 10

ORA-04088: 触发器 'CMAFTER_INSERTUSER_GROUP' 执行过程中出错


查看对应触发器,脚本内容如下:

CREATE OR REPLACE TRIGGER after_insertuser_group
  after insert on te_user  
  for each row
declare
 v_group_id VARCHAR2(50);
 countSize  varchar(10);

begin
  if inserting then
     if :new.psn_level=1 then
       select count(*) into countSize from TR_GROUP t1 where t1.bill_num=:new.bill_num and t1.group_type='1';
       if countSize>0 then
         select t.group_id into v_group_id from TR_GROUP  t where t.bill_num=:new.bill_num and t.group_type='1';
         insert into tr_user_group(psn_id, group_id, group_ord)values(:new.psn_id, v_group_id, 0);
       else
         insert into tr_user_group(psn_id, group_id, group_ord)values(:new.psn_id, 'null', 0);
       end if;
     end if;
  end if;
end after_insertuser_group;


然后查看相关表数据信息:

select count(*) from TR_GROUP t1 where t1.bill_num='9003000000‘ and t1.group_type='1';

发现返回信息有4条数据,

但是select into是隐式游标,只能传一个内容进去,在返回多行与没有返回数据的时候都会报错

不然就是insert 表时也会报错.





转载请标明出处【oracle 11g ORA-01422实际返回的行数超出请求的行数】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论