CREATE TABLE "ICP_ECONOMICO"
(
"PERIOD" NUMBER
)
PARTITION BY RANGE ("PERIOD") INTERVAL (1)
(PARTITION "P_0" VALUES LESS THAN (196905) ) ;
Creato table "ICP_ECONOMICO".
set lines 300
col interval for a30
col TABLE_NAME for a30
select table_name, PARTITIONING_TYPE, STATUS, INTERVAL, PARTITION_COUNT,
(select count(*) from user_tab_partitions pts where pts.table_name = pt.table_name) real_count
from user_part_tables pt
where table_name ='ICP_ECONOMICO'
order by table_name;
TABLE_NAME PARTITION STATUS INTERVAL PARTITION_COUNT REAL_COUNT
----------- --------- -------- --------- --------------- ----------
ICP_ECONOMICO RANGE VALID 1 1048575 1
insert into ICP_ECONOMICO (period) values(20160101);
Errore con inizio alla riga : 178 nel comando -
insert into ICP_ECONOMICO (period) values(20160101)
Report error -
Errore SQL: ORA-14300: la chiave di partizionamento è mappata a una partizione non inclusa nel numero massimo consentito di partizioni
14300. 00000 - "partitioning key maps to a partition outside maximum permitted number of partitions"
*Cause: The row inserted had a partitioning key that maps to a partition number greater than 1048575
*Action Ensure that the partitioning key falls within 1048575 partitions or subpartitions.
ALTER TABLE ICP_ECONOMICO SET INTERVAL (100);
Table ICP_ECONOMICO modificato.
insert into ICP_ECONOMICO (period) values(20160101);
1 riga inserito.
set lines 300
col interval for a30
col TABLE_NAME for a30
select table_name, PARTITIONING_TYPE, STATUS, INTERVAL, PARTITION_COUNT,
(select count(*) from user_tab_partitions pts where pts.table_name = pt.table_name) real_count
from user_part_tables pt
where table_name ='ICP_ECONOMICO'
order by table_name;
TABLE_NAME PARTITION STATUS INTERVAL PARTITION_COUNT REAL_COUNT
-------------- --------- -------- --------- --------------- -----------------------------
ICP_ECONOMICO RANGE VALID 100 1048575 2
Se proviamo ad inserire altri record il problema non sembra più presentarsi a meno che non inserisce un valore che abbia un numero di cifre maggiore ad 8.
insert into ICP_ECONOMICO (period) values(99991201);
1 riga inserito.
insert into ICP_ECONOMICO (period) values(999912010);
Report error -
Errore SQL: ORA-14300: la chiave di partizionamento è mappata a una partizione non inclusa nel numero massimo consentito di partizioni
14300. 00000 - "partitioning key maps to a partition outside maximum permitted number of partitions"
*Cause: The row inserted had a partitioning key that maps to a partition number greater than 1048575
*Action Ensure that the partitioning key falls within 1048575 partitions or subpartitions.
ALTER TABLE ICP_ECONOMICO SET INTERVAL (1000);
Table ICP_ECONOMICO modificato.
set lines 300
col interval for a30
col TABLE_NAME for a30
select table_name, PARTITIONING_TYPE, STATUS, INTERVAL, PARTITION_COUNT,
(select count(*) from user_tab_partitions pts where pts.table_name = pt.table_name) real_count
from user_part_tables pt
where table_name ='ICP_ECONOMICO'
order by table_name;
TABLE_NAME PARTITION STATUS INTERVAL PARTITION_COUNT REAL_COUNT
-------------- --------- -------- -------- ----------------- ----------
ICP_ECONOMICO RANGE VALID 1000 1048575 3
insert into ICP_ECONOMICO (period) values(999912010);
1 riga inserito.
A questo punto sembra che il numero di cifre sia legato al valore dell'intervallo di partizionamento e più precisamente:
Intervallo 1 = Numero di cifre 6
Intervallo 100 = Numero di cifre 8
Intervallo 1000 = Numero di cifre 9
se inserisco adesso un numero di cifre pari a 10 avrò nuovemente l'errore.
insert into ICP_ECONOMICO (period) values(9999120101);
Report error -
Errore SQL: ORA-14300: la chiave di partizionamento è mappata a una partizione non inclusa nel numero massimo consentito di partizioni
14300. 00000 - "partitioning key maps to a partition outside maximum permitted number of partitions"
*Cause: The row inserted had a partitioning key that maps to a partition number greater than 1048575
*Action Ensure that the partitioning key falls within 1048575 partitions or subpartitions
E qui vi lascio perchè non so dare alcuna spiegazione a questo comportamento.