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 );

请注意,CONSTRAINT如果您不需要 dbms 强制执行约束,则可以在表创建语句中省略除 pk 约束之外的行。创建表后,所有剩余的列都可以通过如下语句创建

ALTER TABLE A0 ADD ( A0_COL_001 NUMBER );

给定 1000 列的数量,语句列表最好由一些简短的 perl 脚本生成。或者,在电子表格中填写 3 列。第 1 列应分别包含 1000 个字符串实例,第a3 列b。用 0 到 999 的数字填充 column2,并将它们格式化为 3 位数字,前导零。将结果保存为 csv 文件。假设您选择作为 csv 分隔符,分别a;ALTER TABLE A0 ADD ( A0_COL_和替换来编辑该文件。;bNUMBER );;

于 2013-04-12T18:40:36.283 回答