帮忙看一下存储过程哪里不对?
CREATE OR REPLACE PROCEDURE DEL_TAB 
IS
 PLTJ NUMBER;
 CURSOR MYCUR IS
  SELECT CLBH FROM XXFL WHERE JGSJ<=ADD_MONTHS(SYSDATE,1);
BEGIN
 PLTJ:=0;
 FOR VAR_CLBH IN MYCUR LOOP
  DELETE FROM TPXX WHERE TPID=VAR_CLBH.CLBH;
  DELETE FROM XXFL WHERE CLBH=VAR_CLBH.CLBH;
  PLTJ:=PLTJ + 1;
  IF PLTJ = 1000 THEN
   COMMIT;
  END IF
 END LOOP; 
END;

解决方案 »

  1.   


    /* Formatted on 2008/11/24 09:36 (Formatter Plus v4.8.8) */
    CREATE OR REPLACE PROCEDURE del_tab
    IS
       pltj   NUMBER;   CURSOR mycur
       IS
          SELECT clbh
            FROM xxfl
           WHERE jgsj <= ADD_MONTHS (SYSDATE, 1);
    BEGIN
       pltj := 0;   FOR var_clbh IN mycur
       LOOP
          DELETE FROM tpxx
                WHERE tpid = var_clbh.clbh;      DELETE FROM xxfl
                WHERE clbh = var_clbh.clbh;      pltj := pltj + 1;      IF pltj = 1000
          THEN
             COMMIT;
          END IF;
       END LOOP;
    END;
    end if 后少了个
      

  2.   

    程序倒数第三行end if后少了个分号;
      

  3.   


    再改一下。
    CREATE OR REPLACE PROCEDURE del_tab
    IS
       pltj   NUMBER;   CURSOR mycur
       IS
          SELECT clbh
            FROM xxfl
           WHERE jgsj <= ADD_MONTHS (SYSDATE, 1);
    BEGIN
       pltj := 0;   FOR var_clbh IN mycur
       LOOP
          DELETE FROM tpxx
                WHERE tpid = var_clbh.clbh;      DELETE FROM xxfl
                WHERE clbh = var_clbh.clbh;      pltj := pltj + 1;      IF pltj = 1000
          THEN
             pltj := 0;
             COMMIT;
          END IF;
       END LOOP;
       commit;
    END;
    LZ原来那样写,要是记录数>1000之后就不会提交了.
      

  4.   

    DECLARE
       TYPE ARR_THDR IS TABLE OF varchar2(13) INDEX BY BINARY_INTEGER;
       tbrows ARR_THDR;
       id    PLS_INTEGER;
       cursor c1 is
           select rpad(decode(trim(CHDRNUM),null,'NULL',trim(CHDRNUM)),8,' ')||tranno contract_number
           from pds_staging.ptrnpf
       ;
    BEGIN
      open c1;
      loop
         fetch c1 bulk collect into tbrows limit 10000;
         FORALL id IN 1 .. tbrows.count()
           DELETE dmrp_transaction_header
           WHERE THDR_CONTRACT_NUMBER = rtrim(substr(to_char(tbrows(id)),1,8))
           AND   THDR_TRANSACTION_NUMBER = to_number(rtrim(substr(to_char(tbrows(id)),9)));
         commit;
         -- dbms_lock.sleep(1); /* if delete too fast */
         exit when c1%notfound;
      end loop;
      close c1;
    exception
       when others then
            if c1%isopen then 
                close c1;
            end if;
            rollback;
            dbms_output.put_line('Error : '||sqlerrm);
    END;
    /