--創建一個分區表
create table scott.testpart
(
?? ?TEXTDATE?? VARCHAR2(8)
)
partition by range ( TEXTDATE )
(
?? ? partition p1 values less than ('20090201'),
??? ?partition
"p2" values less than ('20090301'),
--注意這里的雙引號?? ? partition pm values less than (MAXVALUE) ?
)
--插入一些數據(順便實踐一下雙層循環)DECLARE
?? ?i int:=1;
?? ?j int:=1;
BEGIN
? ??? ?WHILE i<=3 LOOP
?? ??? ???? WHILE j<=3 LOOP
?? ??? ??? ???? insert into scott.testpart values (2009*10000+i*100+j);
???? ??? ??? ?? j:=j+1;
?? ??? ???? END LOOP;???? ??? ?
?? ???? i:=i+1;?? ?
?? ???? j:=1;
--注意要重置j,否則就回不到j循環里面了?? ???? END LOOP;
END;
--需要先進行分析,否則num_rows列將為空analyze table scott.testpart compute statistics;
--查看各個分區的情況select table_name, partition_name, num_rows from DBA_TAB_PARTITIONS
where table_owner='SCOTT' and table_name='TESTPART';
TABLE_NAME??????????????? PARTITION_NAME?????????? NUM_ROWS
-------------------------- ------------------------------ ----------
TESTPART?????????????????????? P1?????????????????????????????????? ? ?? ?? ?? 3
TESTPART?????????????????????? PM????????????????????????????????? ? ? ?? ?? 3
TESTPART??????????????????????
p2?????????????????????????????????????? ? ? ? 3
注意p2因為加了引號仍然是小寫(但并不顯示引號,這點比較討厭),沒加引號的會顯示為大寫--驗證數據確實進入了正確的分區select * from scott.testpart partition(p1);
TEXTDATE
--------
20090101
20090102
20090103
--創建p2時有引號,使用p2時也就需要引號。--特別的,用一些第三方客戶端創建分區表時,生成的SQL往往會自動加上引號,而查看DBA_TAB_PARTITIONS時又看不出來,所以遇到下面的問題,可以加個引號試試。select * from scott.testpart partition(p2);
ERROR at line 1:
ORA-02149: Specified partition
does not existselect * from scott.testpart partition(
"p2");
TEXTDATE
--------
20090201
20090202
20090203
--其它相關select * from scott.testpart;
truncate table scott.testpart;
drop table scott.testpart;
posted on 2009-08-18 18:17
Jcat 閱讀(264)
評論(0) 編輯 收藏 所屬分類:
Database