CREATE OR REPLACE PROCEDURE 存储过程名(hash_num in number, hash_value in number, -- hash值
batch_num in NUMBER DEFAULT 5000, -- 一批处理数
commitnum IN NUMBER DEFAULT 500, -- 一次提交数
beginhour IN NUMBER DEFAULT 0, -- 开始时间
endhour IN NUMBER DEFAULT 17 -- 结束时间
) AS
/*
CREATE DATE:时间
CREATE BY:工号
DESC : 存储过程功能描述
*/
-- 提取数据
CURSOR cursor_name IS SELECT t.*,ROWID FROM tt_telhis_src t WHERE nvl(t.deal_flg,0) = 0
AND dbms_utility.get_hash_value(t.fulltel,0,hash_num) = hash_value AND rownum <= batch_num;
-- 游标结构声明
v_cursor cursor_name % ROWTYPE;
-- 记录处理条数
procnum NUMBER DEFAULT 0;
BEGIN
-- 不在时间段内,job空跑
IF NOT (SYSDATE BETWEEN trunc(SYSDATE)+beginhour/24 AND trunc(SYSDATE) + endhour/24) THEN
RETURN;
END IF;
FOR X IN v_cursor LOOP
-- 业务逻辑
-- 批次提交
procnum := procnum + 1;
IF MOD(procnum, commitnum) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
-- 异常处理
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
-- 记录异常日志
PKG_SYS_LOG.ERROR_LOG(NULL,
'存储过程名',
SYSDATE,
SQLCODE,
SQLERRM,
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,
NULL);
END 存储过程名;
/