为Oracle DB创建特定表

时间:2013-04-12 07:56:51

标签: database oracle

我必须制作一张有一些规格和限制的表格。我对自动表创建不是很熟悉。我必须为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

我必须制作一个剧本?脚本文件的扩展名和执行位置是什么? 有人可以指出我正确的方向,我会非常感激。

1 个答案:

答案 0 :(得分: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 );

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

之类的语句创建
ALTER TABLE A0 ADD ( A0_COL_001 NUMBER );

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