sql >> Database teknologi >  >> RDS >> Oracle

Oracle PL/SQL Release 12.2.0.1.0 vs 12.1.0.2.0 - eksekver med det samme med parametre

Som nævnt af @Alex er oprettelse af en sekvens med partitionsklausul udokumenteret funktion som WMCONCAT . Se nedenstående forklaring:

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

Du kan se her, at oracle internt gemmer sekvensdefinitionen i en partition og derfor vises det i DDL .

Opret en anden sekvens

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

Du ser nu, at Oracle denne gang skabte en sekvens i en partiton og dermed viste den i DDL-definiton.

Nogle funktioner, oracle havde reserveret til sin egen interne brug, som derfor holdes udokumenteret.

I dit tilfælde vil en anden del fungere fint, hvis du fjerner den del. Se nedenfor:

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. Om nytten af ​​udtryksindekser

  2. Er $_SESSION sikker mod sql-injektioner?

  3. Eksporter kun visninger i Postgres

  4. Hvordan udfører man FULD YDRE JOIN i ORACLE ved hjælp af '+'-operatoren?