--創(chuàng)建一個(gè)分區(qū)表
create table scott.testpart
(
?? ?TEXTDATE?? VARCHAR2(8)
)
partition by range ( TEXTDATE )
(
?? ? partition p1 values less than ('20090201'),
??? ?partition "p2" values less than ('20090301'), --注意這里的雙引號(hào)
?? ? partition pm values less than (MAXVALUE) ?
)
--插入一些數(shù)據(jù)(順便實(shí)踐一下雙層循環(huán))
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(luò)循環(huán)里面了
?? ???? END LOOP;
END;
--需要先進(jìn)行分析,否則num_rows列將為空
analyze table scott.testpart compute statistics;
--查看各個(gè)分區(qū)的情況
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因?yàn)榧恿艘?hào)仍然是小寫(但并不顯示引號(hào),這點(diǎn)比較討厭),沒加引號(hào)的會(huì)顯示為大寫
--驗(yàn)證數(shù)據(jù)確實(shí)進(jìn)入了正確的分區(qū)
select * from scott.testpart partition(p1);
TEXTDATE
--------
20090101
20090102
20090103
--創(chuàng)建p2時(shí)有引號(hào),使用p2時(shí)也就需要引號(hào)。
--特別的,用一些第三方客戶端創(chuàng)建分區(qū)表時(shí),生成的SQL往往會(huì)自動(dòng)加上引號(hào),而查看DBA_TAB_PARTITIONS時(shí)又看不出來,所以遇到下面的問題,可以加個(gè)引號(hào)試試。
select * from scott.testpart partition(p2);
ERROR at line 1:
ORA-02149: Specified partition does not exist
select * from scott.testpart partition("p2");
TEXTDATE
--------
20090201
20090202
20090203
--其它相關(guān)
select * from scott.testpart;
truncate table scott.testpart;
drop table scott.testpart;