Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Mailing Lists -> Oracle-L -> RE: Spam:range partition issue
Roger that. I was a bit too quick in my response.
Here is a test that shows what I was trying (but messed up) to say yesterday:
SQL> insert into test_part values(897515520,1200000); SQL> insert into test_part values(897515520,1600000); SQL> SQL> select count(*) from test_part partition(usage_1); COUNT(*) --------------- 1
COUNT(*)
1
SQL>
*********** Data is in the partitions as expected.
SQL>
SQL> insert into test_part values(897515519,1600000);
*********** This insert "should" be in the second partition.
SQL> insert into test_part values(897515519,1200000); *********** This insert should be in the first partition.
SQL> select count(*) from test_part partition(usage_1);
COUNT(*)
3
SQL> select count(*) from test_part partition(usage_2);
COUNT(*)
1
SQL>
SQL> select * from test_part partition(usage_1);
COL1 COL2
--------------- ---------------
897515520 1200000 897515519 1600000 897515519 1200000 -----------------------
Ric,
Actually is works by comparing until is does *not* have a match. I
tested Harvinder's example, and it behaves as expected; I think
Harvinder must have had an error in his own test.
Quoting from the manual:
"When a table or index is partitioned by range on multiple columns, each
partition bound and partitioning key is a list (or vector) of values. The partition bounds and keys are ordered according to ANSI SQL2 vector comparison rules. This is also the way Oracle orders multicolumn index keys.
To compare a partitioning key with a partition bound, you compare the values of their corresponding columns until you find an unequal pair and
then that pair determines which vector is greater. The values of any remaining columns have no effect on the comparison."
Ric Van Dyke wrote:
>
> Oracle compares from left to right and stops when it has a match:
>
> First row: 897515520,1200000 The first value is less then or equal to
> the first key of the partition, so it goes in that partition.
>
> Second row: 897515520,1600000 The first value is less then or equal to
> the first key of the partition, so it goes in that partition.
>
> In both cases it never even looks at the second value. I forget the
> name of this mechanism but it's the way it works.
>
> -----------------------
>
> Ric Van Dyke
>
> Hotsos Enterprises
>
> -----------------------
>
>
-- http://www.freelists.org/webpage/oracle-lReceived on Thu Nov 15 2007 - 10:30:52 CST
![]() |
![]() |