1

いくつかの仕様と制限のあるテーブルを作成する必要があります。自動テーブル作成にはあまり詳しくありません。これをOracle DB用に作成する必要があります。テーブル名: A0

Primary key (NUMBER), A0_PK
Date (DATE), A0_DATE
VARCHAR2, A0_INTERVAL
Value (NUMBER), A0_VALUE
Other 1000 columns, called for example. A0_COL_058

テーブルは、制約付きで 100.000 行、ランダムな値で埋められる必要があります。

Primary key is sequential: 1, 2, 3...
Date: only days (without time) for year 2013.
A0_INTERVAL, like date but string in YYYYMMDD format
Value: number in [0, 100]
Others: null

スクリプトを作成する必要がありますか? スクリプト ファイルの拡張子と実行場所は? 誰かが私を正しい方向に向けてください。

4

1 に答える 1

1

基本的なセットアップについては、次の行に沿って何かを提案します。

    CREATE TABLE A0 (
          a0_pk         NUMBER
        , a0_date       DATE
        , a0_interval   VARCHAR2(20)
        , a0_value      NUMBER
        , CONSTRAINT c_a0_pk        PRIMARY KEY (a0_pk)
        , CONSTRAINT c_a0_date      CHECK ( a0_date >= TO_DATE ( '01.01.2013 00:00:00', 'DD.MM.YYYY HH24:MI:SS' ) AND a0_date < TO_DATE ( '01.01.2014 00:00:00', 'DD.MM.YYYY HH24:MI:SS' ) )
        , CONSTRAINT c_a0_value     CHECK ( a0_value BETWEEN 0 AND 100 )
    );


    BEGIN
        FOR i IN 1 .. 100 LOOP
            INSERT
              INTO A0
                 ( a0_pk
                 , a0_date
                 , a0_value
                 )
            VALUES
                 ( i
                 , TO_DATE ( '01.01.2013 00:00:00', 'DD.MM.YYYY HH24:MI:SS' ) + 365 * DBMS_RANDOM.VALUE
                 , TO_CHAR ( a0_date, 'YYYYMMDD' )
                 , FLOOR ( DBMS_RANDOM.VALUE ( 0, 101 ) )
                 )
                 ;
        END LOOP;
    END;

    UPDATE A0
       SET a0_interval = TO_CHAR ( a0_date, 'YYYYMMDD' )
         ;

    COMMIT;

    ALTER TABLE A0 ADD CONSTRAINT c_a0_interval  CHECK ( TO_CHAR ( a0_date, 'YYYYMMDD' ) = a0_interval );

CONSTRAINTdbms によって強制される制約が必要ない場合は、テーブル作成ステートメントの pk 制約以外の行を省略できることに注意してください。テーブルの作成後、残りのすべての列は次のようなステートメントで作成できます

ALTER TABLE A0 ADD ( A0_COL_001 NUMBER );

列数が 1000 であるため、ステートメントのリストは短い perl スクリプトで生成するのが最適です。または、スプレッドシートに 3 つの列を入力します。列 1 は、文字列a、列 3の 1000 個のインスタンスをbそれぞれ保持します。column2 に 0 から 999 までの数字を入力し、先頭にゼロを付けて 3 桁にフォーマットします。結果を csv ファイルとして保存します。csvセパレータとして選択したと仮定して、それぞれをa;ALTER TABLE A0 ADD ( A0_COL_に置き換えてそのファイルを編集します。;bNUMBER );;

于 2013-04-12T18:40:36.283 に答える