Q:今天执行存储过程突然报了这个错
存储过程很简单
declare
maxdocno integer; --最大单证流水号
currno integer := 1; --初始条件
makenum integer := 100;--造数据数量【变量】
tBatNo varchar2(1); --批次号
tSysYY varchar2(2); -- 系统年
maxno varchar2(7); -- 版本最大流水
begin
--目前版本表流水号不规范,先虚拟下版本表批次,用一个从未用过的新批次,防止与核销表冲突,例如9【变量】
tBatNo:='9';
--获取版本最大流水号
select to_char(sysdate, 'yy'), t.max_number into tSysYY,maxno from t_doc_version_info t where t.doc_ver_code='11051100002' and t.org_flag='1';
--计算生成流水号
maxno := lpad(maxno, 7, 0);
maxdocno := tSysYY || tBatNo || maxno;
loop
--插入数据,版本名称可以自定义,方便测试后,用这个字段清除数据
insert into t_doc_num_scope (PK_DOC_NUM_SCOPE, FK_DOC_VER_CODE, DOC_VER_NAME, START_NUM, END_NUM, STA_VCH_CLS, STA_VCH, TAKE_NUM, TAKE_TM, SGN_END_TM, ORG_FLAG, CREATE_USER_ID, CREATE_TIME, MODIFY_USER_ID, MODIFY_TIME, ORG_ID, ROLE_ID, TAKER_ID, INVOICE_CODE, START_INVOICE, END_INVOICE, SHORT_CODE, STA_FLOW, STA_BACK, STA_ARCHV, STA_SPEC, STA_SPEC_RSN, STA_BUSS, STA_CARD, PRNT_TM, SEND_TM, RECV_TM, VERIF_TM, BACK_TM, ARCHV_TM, REDFLUSH_TM, STA_VCH_TM, STA_SPEC_RSN_TM, STA_OVERDUE, RATE_FLAG, IS_NEW_ORDER)
values (S_PK_DOC_NUM_SCOPE.nextval, '11051100002', 'HFJ测试数据', maxdocno+currno, maxdocno+currno, '1', '12', 1, sysdate, sysdate, '1', 'AB017257', sysdate, '', sysdate, '89', '8900000006', 'AB017257', '', null, null, 'PC0511', '0', '62', '72', '0', '0', '0', '0', sysdate, null, sysdate, null, null, null, null, sysdate, sysdate, '01', '0', '0');
--参数递增
currno := currno + 1;
--停止条件
exit when currno > makenum;
end loop;
--更新版本表最大流水号
update t_doc_version_info t set t.max_number=maxno+makenum where t.doc_ver_code='11051100002';
commit;
end;
无非就是从版本表取最大流水号递增插入库存表
A:
ORA-01403:no data found
ORA-06512:at line 12
原因很明了,没查到数据, 错误行在12行
select to_char(sysdate, 'yy'), t.max_number into tSysYY,maxno from t_doc_version_info t where t.doc_ver_code='11051100002' and t.org_flag='1';
我要从版本表查max_number放到变量maxno ,版本表里没有查到数据所以报错了
,询问了下,原来数据库刷库了,我查的版本号11051100002已经不存在了,重新换个存在的版本号即可。