sql >> データベース >  >> RDS >> Oracle

Oracle PL/SQLリリース12.2.0.1.0と12.1.0.2.0-パラメータを使用して即時実行

    @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
    

    ここで、内部的に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定義でそれを示しました。

    一部の機能は、オラクルが独自の内部使用のために予約していたため、文書化されていません。

    あなたの場合、その部分を削除すると、他の部分は正常に機能します。以下を参照してください:

    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. MySQLのようなRDBMSに双方向の関係を保存する方法は?

    2. 文字列列の数値をグループ化して比較します

    3. テーブルの作成 - SQL エラー:ORA-00905:キーワードがありません

    4. プリペアドステートメントでワイルドカードのように使用する