첫째,이 때문에 당신이 처음에 수동으로 모든 DDL을 실행할 수 있습니다, 그 파티션은 오라클에 고급 될 수 있습니다 지적하고 싶습니다 당신까지 ' DDL 스크립트를 실행하는 데 충분히 자신감을 가져야합니다. 또한 을 이해하지 않고도와 을으로 테스트하지 않고 인터넷에서 스크립트를 절대 실행하지 말 것을 권합니다. 특히 DDL 스크립트.
지금 손에서 문제를 들어, 파티션 경계를 검색 할
*_TAB_PARTITIONS
사전 뷰를 조회 할 수 있습니다
SQL> SELECT partition_name, high_value
2 FROM user_tab_partitions
3 WHERE table_name = 'TEST_TABLE';
PARTITION_NAME HIGH_VALUE
--------------- --------------------------------------------------------
PT01122012 TO_DATE(' 2012-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01022013 TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01042013 TO_DATE(' 2013-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01062013 TO_DATE(' 2013-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01082013 TO_DATE(' 2013-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
이 열은 유형 LONG
(= 사용되지 LOB)이다 그래서 우리는 함께 필터링 할 수있는 몇 가지 도구를 가지고 SQL을 사용하려면 PL/SQL을 사용해야합니다.
SQL> BEGIN
2 FOR cc IN (SELECT partition_name, high_value --
3 FROM user_tab_partitions
4 WHERE table_name = 'TEST_TABLE') LOOP
5 EXECUTE IMMEDIATE
6 'BEGIN
7 IF sysdate >= ADD_MONTHS(' || cc.high_value || ', 2) THEN
8 EXECUTE IMMEDIATE
9 ''ALTER TABLE TEST_TABLE DROP PARTITION '
10 || cc.partition_name || '
11 '';
12 END IF;
13 END;';
14 END LOOP;
15 END;
16/
PL/SQL procedure successfully completed
SQL> SELECT partition_name, high_value
2 FROM user_tab_partitions
3 WHERE table_name = 'TEST_TABLE';
PARTITION_NAME HIGH_VALUE
--------------- -----------------------------------------------------------
PT01022013 TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
PT01042013 TO_DATE(' 2013-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
PT01062013 TO_DATE(' 2013-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
PT01082013 TO_DATE(' 2013-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
절차 적 접근 방식을 삭제하는 다른 방법을 제안 해주십시오. – TomJava
테이블에있는 기본 키는 어떻게됩니까? – TomJava
@TomJava 늦었지만 다른 사람들이 나중에 올 것임을 알고 있습니다. 이것은 설명서 이외의 최선의 방법입니다. update indexes 문을 추가하여 파티션 삭제의 결과로 다시 작성되도록 할 수 있습니다. IOT가 파티션 된 경우 "글로벌 인덱스 업데이트" –