Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle PL/SQL версия 12.2.0.1.0 срещу 12.1.0.2.0 - незабавно изпълнение с параметри

Както беше споменато от @Alex, създаването на последователност с клауза за разделяне е недокументирана функция като 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

Можете да видите тук, че вътрешно Oracle запазва дефиницията на последователността в някакъв 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при извличане на таблица за връщане от последователност от функция на Oracle в C#, където функцията използва dblink към SQL Server

  2. връзка "един към много" с ограничение на базата данни и inverse=true

  3. В база данни на Oracle каква е разликата между ROWNUM и ROW_NUMBER?

  4. Как да избера подниз в oracle?

  5. Преобразуване на Unix Timestamp в стойност на дата в Oracle