Как уже упоминалось @Alex, создание последовательности с предложением Partition является недокументированной функцией, такой как WMCONCAT
.См. Объяснение ниже:
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
Здесь вы можете видеть, что оракул внутренне сохраняет определение последовательности в некотором partition
и, следовательно, оно показывает в DDL
.
Создайте другую последовательность
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
Теперь вы видите, что на этот раз Oracle создал последовательность в некотором разделе и, следовательно, показал, что в определении DDL.
Некоторые функции oracle зарезервированы для его собственного внутреннего использования, что, следовательно, хранится без документов.
В вашем случае, если вы удалите эту часть, другая часть будет работать нормально.Смотрите ниже:
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;