问题:
表数据描述:1、STG.STG_D_TCM_USER_PROD 表中存放1-12月数据(1亿条); 
            2、state = '0'的只有1000000条;
            3、state = '0'为需要数据
需求描述:过程每次都要跑数据的时候 W_M_RET_CLW_NET_MID1 数据都会被重新插入一次数据。
          其实我只想在 W_M_RET_CLW_NET_MID1表中的数据小于V_ACCT_MONTH的时候才跑这个表,请问怎么实现 
CREATE OR REPLACE PROCEDURE P_W_M_RET_CLW_NET(V_ACCT_MONTH IN VARCHAR2,
                                                   V_RETCODE    OUT VARCHAR2,
                                                   V_RETINFO    OUT VARCHAR2) ISBEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE W_M_RET_CLW_NET_MID1';
      INSERT INTO W_M_RET_CLW_NET_MID1
        SELECT T1.ACCT_DATE,--日期:格式:20101201
               T1.USER_ID,
               T1.PROD_NO,
               T1.PROD_NAME,
               T1.PROD_INST_NO
          FROM STG.STG_D_TCM_USER_PROD T1
          WHERE T.STATE = '0'
      COMMIT;
EXECUTE IMMEDIATE 'TRUNCATE TABLE W_M_RET_CLW_NET';  
      INSERT INTO W_M_RET_CLW_NET
         SELECT * FROM W_M_RET_CLW_NET_MID1 T WHERE T.ACCT_MONTH = V_ACCT_MONTH;
         COMMIT;
         
END;

解决方案 »

  1.   

    是表W_M_RET_CLW_NET_MID1中的ACCT_MONTH小于V_ACCT_MONTH这个就跑这个数据?
    你说的跑这个数据是什么意思?
    还有W_M_RET_CLW_NET_MID1表中的数据小于V_ACCT_MONTH?
      

  2.   


    W_M_RET_CLW_NET_MID1表中的数据小于V_ACCT_MONTH的时候才跑这个表
    这个表中的什么字段少于V_ACCT_MONTHV_ACCT_MONTH  什么格式的
      

  3.   

    还好你还truncate 不然你的表碎片就多了 
      

  4.   

    CREATE OR REPLACE PROCEDURE P_W_M_RET_CLW_NET(V_ACCT_MONTH IN VARCHAR2,
      V_RETCODE OUT VARCHAR2,
      V_RETINFO OUT VARCHAR2) IS
    num number;
    BEGIN
    select count(*) into num from TABLE W_M_RET_CLW_NET_MID1 where ACCT_MONTH<=to_char(V_ACCT_MONTH,'yyyymmdd');
    if num=0 then
    EXECUTE IMMEDIATE 'TRUNCATE TABLE W_M_RET_CLW_NET_MID1';
      INSERT INTO W_M_RET_CLW_NET_MID1
      SELECT T1.ACCT_DATE,--日期:格式:20101201
      T1.USER_ID,
      T1.PROD_NO,
      T1.PROD_NAME,
      T1.PROD_INST_NO
      FROM STG.STG_D_TCM_USER_PROD T1
      WHERE T.STATE = '0'
      COMMIT;
    EXECUTE IMMEDIATE 'TRUNCATE TABLE W_M_RET_CLW_NET';   
      INSERT INTO W_M_RET_CLW_NET
      SELECT * FROM W_M_RET_CLW_NET_MID1 T WHERE T.ACCT_MONTH = V_ACCT_MONTH;
      COMMIT;
     else
    return null;
    end if;
    END;