Oracle Procedure模板

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 存储过程名;
/

  

原文地址:https://www.cnblogs.com/fubinhnust/p/9928688.html