Citazione dalla Guida ai concetti di Oracle
Supponiamo di avere una tabella ORDER come descritto nella tua domanda.
-- create table ORDER_, with test data
-- table name with trailing underscore avoids ORA-00903: invalid table name
create table order_
as
select
level * 10000 + trunc( dbms_random.value * 100 ) order_id
, trunc( dbms_random.value * 100000 ) part_id
, dbms_random.string( 'x', 10 ) customer_id
, trunc( sysdate + level * 10 ) order_date
from dual connect by level <= 10 ;
Dati di prova
SQL> select * from order_ ;
ORDER_ID PART_ID CUSTOMER_ID ORDER_DATE
10069 74711 KBGHAHWTL8 27-MAR-18
20034 99571 7VUNFJER44 06-APR-18
30038 64160 ORXP2RRA3K 16-APR-18
40005 81247 B9N43NSVQ7 26-APR-18
50019 90889 8H5G12D82E 06-MAY-18
60017 34107 9O4OSETJ4H 16-MAY-18
70078 53959 77MUCKJW82 26-MAY-18
80015 9496 U5J6Z85KXR 05-JUN-18
90081 88450 2LEUPZGFOS 15-JUN-18
100031 38487 NX4BHBF3TN 25-JUN-18
Se ora crei solo un IOT (tabella organizzata dell'indice), sarà vuoto.
-- your original code
CREATE TABLE clust_order(
order_id number,
part_id number,
CONSTRAINT part_pk PRIMARY KEY (part_id)
)ORGANIZATION INDEX;
Table CLUST_ORDER created.
SQL> select * from clust_order ;
no rows selected
Quello che potresti fare invece, è:creare l'IOT selezionando dalla tabella originale (vedi anche:Parallelizing Index-Organized Table Creation qui ).
create table clust_order
(
part_id constraint part_pk primary key
, order_id
)
organization index
parallel
as
select
part_id
, order_id
from order_;
L'IOT risultante contiene ...
SQL> select * from clust_order;
PART_ID ORDER_ID
9496 80015
34107 60017
38487 100031
53959 70078
64160 30038
74711 10069
81247 40005
88450 90081
90889 50019
99571 20034
Potresti trovare questa discussione utile.