【问题标题】:Insert random data in Oracle table在 Oracle 表中插入随机数据
【发布时间】:2016-02-24 22:23:11
【问题描述】:

我想在 Oracle 表中创建随机数据:

CREATE TABLE EVENTS(
  EVENTID INTEGER NOT NULL,
  SOURCE VARCHAR2(50 ),
  TYPE VARCHAR2(50 ),
  EVENT_DATE DATE,
  DESCRIPTION VARCHAR2(100 )
)
/

我试过这个:

BEGIN  
FOR loop_counter IN 1..1000 
LOOP 
INSERT INTO EVENTS (EVENTID, SOURCE, TYPE, EVENT_DATE, DESCRIPTION) VALUES (loop_counter, loop_counter, 'warning', 
DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J') ,TO_CHAR(DATE '9999-12-31','J')), dbms_random.value(1,100)); 
END LOOP; 
COMMIT; 
END;

我得到这个错误异常

错误报告 - ORA-06550:第 5 行,第 13 列:PL/SQL:ORA-00932: 不一致的数据类型:预期 DATE 得到 NUMBER ORA-06550:第 4 行, 第 1 列:PL/SQL:忽略 SQL 语句 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:

你能给我建议如何解决这个问题吗?

【问题讨论】:

  • 是的,我更新了帖子。
  • dbms_random() 调用也不会返回日期,因此如果您尝试将3684482.0997 之类的数字插入到DATE 列中,它将失败
  • 我必须如何更新它?

标签: sql oracle plsql oracle11g


【解决方案1】:

用途:

BEGIN  
FOR loop_counter IN 1..1000 LOOP 
INSERT INTO "EVENTS" (EVENTID, "SOURCE", TYPE, EVENT_DATE, DESCRIPTION) 
VALUES (loop_counter, loop_counter, 'warning', 
        TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J') ,TO_CHAR(DATE '9999-12-31','J'))),'J')
        ,dbms_random.value(1,100)
       ); 
END LOOP; 
COMMIT; 
END;

SqlFiddleDemo

变化:

  1. 在最终的END 之后添加缺失的;
  2. 引用关键字
  3. 重写随机日期生成

【讨论】:

    【解决方案2】:

    另外,如果您使用 Allroundautomations 的 PL/SQL Developer,您会发现 这项工作的好工具:数据生成器。 它可能非常有用,因为它可以帮助生成一些数据 在任何类型中并将其放置到表格中。

    (见附件截图)

    【讨论】:

      【解决方案3】:
      INSERT INTO EVENTS (EVENTID, "SOURCE", TYPE, EVENT_DATE, DESCRIPTION)
      SELECT level, level, 'warning', 
              TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J') ,TO_CHAR(DATE '9999-12-31','J'))),'J')
              ,dbms_random.value(1,100)
        FROM DUAL
      CONNECT BY LEVEL <= 1000;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-21
        • 1970-01-01
        • 2021-10-27
        • 2013-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多