Seperti yang disebutkan oleh @Alex, membuat urutan dengan klausa Partisi adalah fitur tidak berdokumen seperti WMCONCAT
. Lihat penjelasan di bawah ini:
sql> create sequence s1;
Sequence created.
sql> select s1.nextval from dual;
NEXTVAL
---------
1
sql> select dbms_metadata.get_ddl('SEQUENCE','S1') from dual;
DBMS_METADATA.GET_DDL('SEQUENCE','S1')
--------------------------------------------------------------------------------
CREATE SEQUENCE "SCOTT"."S1" MINVALUE 1 MAXVALUE 99999999999999999999999999
99 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER NOCYCLE NOPARTITION
Anda dapat melihat di sini bahwa secara internal Oracle menyimpan definisi urutan di beberapa partition
dan karenanya ditampilkan di DDL
.
Buat urutan lain
sql> create sequence s2 partition;
Sequence created.
sql> select s2.nextval from dual;
NEXTVAL
---------------
4103920000000000000000000000000001
sql> select dbms_metadata.get_ddl('SEQUENCE','S2') from dual;
DBMS_METADATA.GET_DDL('SEQUENCE','S2')
--------------------------------------------------------------------------------
CREATE SEQUENCE "SCOTT"."S2" MINVALUE 1 MAXVALUE 99999999999999999999999999
99 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER NOCYCLE PARTITION 100000000
Anda lihat sekarang kali ini Oracle membuat urutan di beberapa partisi dan karenanya menunjukkannya dalam definisi DDL.
Beberapa fitur oracle telah disediakan untuk penggunaan internalnya sendiri yang karenanya tidak didokumentasikan.
Dalam kasus Anda, jika Anda menghapus bagian itu, bagian lain akan berfungsi dengan baik. Lihat di bawah:
DECLARE
max_id INTEGER;
BEGIN
SELECT MAX(ID) + 1 INTO max_id FROM MY_TABLE;
EXECUTE IMMEDIATE 'CREATE SEQUENCE MY_TABLE_ID MINVALUE 1 MAXVALUE 99999999999999 INCREMENT BY 1 START WITH '|| max_id||' CACHE 100 NOORDER NOCYCLE ' ;
END;