自動(dòng)創(chuàng)建分區(qū)實(shí)現(xiàn)如下: /************************************************************************** Program Name:Add_Partition Description: 創(chuàng)建某個(gè)用戶下個(gè)月的所有分區(qū) ***************************************************************************/ PROCEDURE add_partition (v_schema IN VARCHAR2) IS CURSOR c_td_table IS SELECT tablename FROM h_retention WHERE typeid = 'PARTITION' AND schemaname = UPPER (v_schema) ORDER BY tablename; v_cur BINARY_INTEGER; v_int BINARY_INTEGER; v_partition VARCHAR2 (30); v_date DATE; v_days NUMBER; sql_stmt VARCHAR2 (1000); -- String used to save sql statement err_msg VARCHAR2 (300); BEGIN v_date := TRUNC (ADD_MONTHS (SYSDATE, 1), 'MM'); v_days := TO_NUMBER (TO_CHAR (LAST_DAY (ADD_MONTHS (SYSDATE, 1)), 'DD')); v_cur := DBMS_SQL.open_cursor; FOR v_table IN c_td_table LOOP v_date := TRUNC (ADD_MONTHS (SYSDATE, 1), 'MM'); v_partition := v_table.tablename; FOR i IN 1 .. v_days LOOP BEGIN sql_stmt := 'ALTER TABLE ' || v_schema || '.' || v_table.tablename || ' ADD PARTITION ' || v_partition || '_' || TO_CHAR (v_date, 'YYMMDD') || ' ' || 'VALUES LESS THAN (TO_DATE(''' || TO_CHAR (v_date + 1, 'YYYY-MM-DD') || ''',''YYYY-MM-DD'')) '; DBMS_SQL.parse (v_cur, sql_stmt, DBMS_SQL.native); v_int := DBMS_SQL.EXECUTE (v_cur); EXCEPTION WHEN OTHERS THEN err_msg := v_partition || ': Create ' || TO_CHAR (v_date, 'YYMMDD') || ' partition unsuccessfully! Error Information:' || SQLERRM; log_insert (err_msg); --You can define your own log_insert function COMMIT; END; v_date := v_date + 1; END LOOP; END LOOP; DBMS_SQL.close_cursor (v_cur); END; |
|