首先贴出我的存储过程
create or replace procedure PROC_FILLANDREMOVECDEM As
V_ERROR NUMBER(10, 0); --异常
e_cardnbr varchar2(20); --卡号
e_filename varchar2(200); --文件名
e_contents clob; --内容
e_productno VARCHAR2(4); --产品编码
e_PAGENO VARCHAR2(4); --版面代码
e_CUSTR varchar2(20); --证件号码
e_STATUS VARCHAR2(5); --处理状态
e_CREATED_TIME DATE; --处理时间
CURSOR E_DATA IS
SELECT * FROM DATASTRIPCARDERR t where t.pageno is null;
begin
for err_data in E_DATA loop
BEGIN
--(select into多个变量时候如果查询的变量有一个为null则进入异常块,终止循环)
select t.cardnbr,
t.filename,
t.contents,
t.productno,
t.pageno,
t.custr,
t.status,
t.created_time
into e_cardnbr,
e_filename,
e_contents,
e_productno,
e_PAGENO,
e_CUSTR,
e_STATUS,
e_CREATED_TIME
from datastripcard t
where t.custr = err_data.custr
and t.productno = err_data.productno;
end;
end loop;
commit;
EXCEPTION
WHEN OTHERS THEN
V_ERROR := SQLCODE;
DBMS_OUTPUT.put_line(V_ERROR);
INSERT INTO s_syslog t
(t.log_id, t.type, t.contents, t.memo)
values
(s_syslog_seq.nextval,
'0008',
v_error,
'。。。。。');
COMMIT;
ROLLBACK;
end PROC_FILLANDREMOVECDEM;
更新后的存储过程:
添加的sql在 ——————————-块之间
create or replace procedure PROC_FILLANDREMOVECDEM As
V_ERROR NUMBER(10, 0); --异常
e_cardnbr varchar2(20); --卡号
e_filename varchar2(200); --文件名
e_contents clob; --内容
e_productno VARCHAR2(4); --产品编码
e_PAGENO VARCHAR2(4); --版面代码
e_CUSTR varchar2(20); --证件号码
e_STATUS VARCHAR2(5); --处理状态
e_CREATED_TIME DATE; --处理时间
e_count number;--注:控制变量
CURSOR E_DATA IS
SELECT * FROM DATASTRIPCARDERR t where t.pageno is null;
begin
for err_data in E_DATA loop
BEGIN
------------------------------------注:每次循环先根据条件看查询的数据是否有值
select count(1)
into e_count
from datastripcard t
where t.custr = err_data.custr
and t.productno = err_data.productno;
IF e_count > 0 THEN
-------------------------------------注:有值的话再赋给变量,这样就不会有异常
select t.cardnbr,
t.filename,
t.contents,
t.productno,
t.pageno,
t.custr,
t.status,
t.created_time
into e_cardnbr,
e_filename,
e_contents,
e_productno,
e_PAGENO,
e_CUSTR,
e_STATUS,
e_CREATED_TIME
from datastripcard t
where t.custr = err_data.custr
and t.productno = err_data.productno;
END IF;
end;
end loop;
commit;
EXCEPTION
WHEN OTHERS THEN
V_ERROR := SQLCODE;
DBMS_OUTPUT.put_line(V_ERROR);
INSERT INTO s_syslog t
(t.log_id, t.type, t.contents, t.memo)
values
(s_syslog_seq.nextval,
'0008',
v_error,
'。。。。。');
COMMIT;
ROLLBACK;
end PROC_FILLANDREMOVECDEM;
这是个笨方法,但是却最简单明了!
希望大神指教方法的不足之处。。。
点赞 (0)赏分享 (0)