`
Forestsai
  • 浏览: 19784 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Oracle 存储过程

 
阅读更多

CREATE OR REPLACE PROCEDURE PROC_DATAFILTER_NEW IS
  TYPE type_cur IS REF CURSOR;
  cur_temp   type_cur;
  v_count    NUMBER;
  v_len      NUMBER;
  v_upnum    VARCHAR(32);
  v_number   VARCHAR(32);
  v_sql      VARCHAR(512);
  V_ERR_CODE NUMBER;
  V_ERR_MSG  VARCHAR2(1024);
BEGIN
  OPEN cur_temp FOR
    SELECT DISTINCT(RTRIM(a.CALLEDPARTYNUMBER))
  FROM SER_BILLS_TEMP a
 WHERE ( a.CALLEDPARTYNUMBER LIKE '4008%'
  OR a.CALLEDPARTYNUMBER LIKE '95%')
   AND NOT EXISTS (SELECT B.UPNUMBER
          FROM BASETAB_810 B
         WHERE B.UPNUMBER = a.CALLEDPARTYNUMBER);
  LOOP
    FETCH cur_temp
      INTO v_upnum; -- CALLEDPARTYNUMBER 集合
    EXIT WHEN cur_temp%NOTFOUND;
    v_len := length(v_upnum);
    FOR i IN 1 .. v_len
    LOOP
      dbms_output.put_line(i||' : v_len = '||v_len);
      IF v_len - i >= 5
      THEN
        SELECT COUNT(*)
          INTO v_count
          FROM basetab_810 b
         WHERE b.groupuserflag = 1
               AND rtrim(b.upnumber) = SUBSTR(v_upnum, 1, v_len - i);
        IF v_count > 0
        THEN
          v_number := SUBSTR(v_upnum, 1, v_len - i);
          v_sql    := '
            UPDATE ser_bills_temp
                   SET calledpartynumber = :a
            WHERE rtrim(calledpartynumber) = :b
          ';
          COMMIT;
          BEGIN
            EXECUTE IMMEDIATE v_sql
              USING v_number, v_upnum;
            COMMIT;
          EXCEPTION
            WHEN OTHERS THEN
              V_ERR_CODE := SQLCODE;
              V_ERR_MSG  := SUBSTR(SQLERRM, 1, 512);
              INSERT INTO T_ERROR_DEBUG
              VALUES
                (V_ERR_CODE,
                 V_ERR_MSG,
                 SYSDATE,
                 v_sql || '_' || v_number || '_' || v_upnum);
              COMMIT;
          END;
        END IF;
      ELSE
        EXIT;
      END IF;
    END LOOP;
  END LOOP;
  CLOSE cur_temp;
END PROC_DATAFILTER_NEW;

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics