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

テーブルといくつかの初期パーティションを動的に作成する方法はありますか?

    sysdateに基づいてSQLステートメントを作成することにより、動的SQLを試すことができます。

    declare
        vSQL            varchar2(32767);
        vPartitions     varchar2(32767);
    begin
        select listagg('PARTITION TABLE_NAME_' || to_char(sysdate + level/24, 'yyyymmddhh24') ||
                       ' VALUES LESS THAN (TIMESTAMP''' || to_char(sysdate + (level+1)/24, 'yyyy-mm-dd hh24') || ':00:00'')'
                       , ', ') within group (order by level) 
        into vPartitions
        from dual
        connect by level <= 24;
        --
        vSQL := q'[ CREATE TABLE TABLE_NAME
                    (
                      CODE1             NUMBER(9)           DEFAULT ( 0 ),
                      CODE2             NUMBER(9)           DEFAULT ( 0 ),
                      CODE3             VARCHAR2(50 BYTE)   DEFAULT ( ' ' ),
                      VELOCITY          NUMBER(10,3)        DEFAULT ( 0 ),
                      REALDATE          TIMESTAMP(6),
                      LOCATION          NUMBER(7,3)         DEFAULT ( 0 ),
                      VALIDLOCATION     NUMBER(1)           DEFAULT ( 0 ),
                      STARTTIME         NUMBER(9)           DEFAULT ( 0 ),
                      OUTBOUND          NUMBER(1)           DEFAULT ( 0 ),
                      SERVICE_NAME      VARCHAR2(20 BYTE)   DEFAULT ( ' ' ),
                      LOCATIONCODE      NUMBER(3)           DEFAULT 0,
                      STARTDATE         TIMESTAMP(6),
                      CODE4             VARCHAR2(1 BYTE)
                    )
                    NOCOMPRESS 
                    TABLESPACE TABLESPACE_NAME
                    PCTUSED    40
                    PCTFREE    10
                    INITRANS   1
                    MAXTRANS   255
                    STORAGE    (
                                BUFFER_POOL      DEFAULT
                               )
                    PARTITION BY RANGE (REALDATE)
                    (]' || vPartitions ||
                    ' )
                    NOCACHE
                    NOPARALLEL
                    MONITORING';    
        execute immediate 'DROP TABLE TABLE_NAME CASCADE CONSTRAINTS'; 
        execute immediate vSQL;
    end;
    



    1. レコードがストアドプロシージャを介してターゲットテーブルに転送された後、ソーステーブルからレコードを削除します

    2. PHPのMSSQLで挿入IDを取得するにはどうすればよいですか?

    3. TYPE TABLE OF VARCHAR2(5)をJavaでマップする方法は?

    4. 集計条件が真になるレコードからフィールド値を取得します