配置oracle过程,使其应接受输入值

时间:2019-02-21 16:33:14

标签: sql oracle

我已经创建了一个程序,该程序现在要从表中删除3个月大的分区,我想使以下程序足够可配置,以便它可以接受用户的计数,因此请告知我如何修改以下程序

create or replace
PROCEDURE Delete_partitions

/*
This procedure will delete partitions for the following tables:
TEMPTABLE
*/

BEGIN
  FOR cc IN
  (
  SELECT partition_name, high_value
  FROM user_tab_partitions
  WHERE table_name = 'TEMPTABLE'
  )

    dbms_output.put_line('starting to drop  partition ');    
  LOOP
    EXECUTE IMMEDIATE 'BEGIN               
IF sysdate >= ADD_MONTHS(' || cc.high_value || ', 2) THEN                  
EXECUTE IMMEDIATE                     
''ALTER TABLE TEMPTABLE DROP PARTITION ' || cc.partition_name || '                     
'';               
END IF;    
  dbms_output.put_line('drop partition completed');        
END;';
  END LOOP;

  exception
    when others then
        dbms_output.put_line(SQLERRM);

END;
/

1 个答案:

答案 0 :(得分:1)

向其中添加一些参数:

create or replace
PROCEDURE Delete_partitions(cnt in number)

/*
This procedure will delete partitions for the following tables:
TEMPTABLE
*/

BEGIN
  FOR cc IN
  (
  SELECT partition_name, high_value
  FROM user_tab_partitions
  WHERE table_name = 'TEMPTABLE'
  )

    dbms_output.put_line('starting to drop  partition ');    
  LOOP
    EXECUTE IMMEDIATE 'BEGIN               
IF sysdate >= ADD_MONTHS(' || cc.high_value || ', ' || cnt-1 || ') THEN                  
EXECUTE IMMEDIATE                     
''ALTER TABLE TEMPTABLE DROP PARTITION ' || cc.partition_name || '                     
'';               
END IF;    
  dbms_output.put_line('drop partition completed');        
END;';
  END LOOP;

  exception
    when others then
        dbms_output.put_line(SQLERRM);

END;
/