【问题标题】:Populate Oracle table with test data for PL/SQL generator使用 PL/SQL 生成器的测试数据填充 Oracle 表
【发布时间】:2017-01-23 17:50:30
【问题描述】:

我想为 Oracle 12c 编写虚拟数据的 PL/SQL 生成器(例如,名字作为最流行的名字和姓氏的组合)。

所以我需要先用源数据填充姓名和姓氏表。

我无法使用 sqlldr,我只能访问 SQL*PlusSQLDeveloper

我可以用许多单独的插入语句填充我的源表,例如:

INSERT INTO names(id, name) VALUES(1, 'Oliver');
INSERT INTO names(id, name) VALUES(2, 'Jack');
⋮
INSERT INTO names(id, name) VALUES(50, 'Aaron');

我想知道是否还有其他(也许更优雅)的选择。


编辑:

我遇到了另一个问题,即生成的标识列的值在INSERT ALL 期间没有增加。 related answer at SO 中描述了一个很好的解决方法。

【问题讨论】:

  • 你可以使用INSERT ALL
  • @GurV 喜欢这样吗? INSERT ALL INTO names (id, name) VALUES (1, 'Oliver’) INTO names (id, name) VALUES (2, 'Jack’) ⋮ INTO names (id, name) VALUES (50, 'Aaron’) SELECT * FROM dual;

标签: sql oracle plsql


【解决方案1】:

您可以在 oracle 中执行此操作:

INSERT INTO names(id, name)
select 1, 'Oliver' from dual union all
select 2, 'Jack' from dual union all
. . . 

然后是 INSERT ALL:

INSERT ALL 
  INTO names (id, name) VALUES (1, 'Oliver')
  INTO names (id, name) VALUES (2, 'Jack')
select * from dual;

我更喜欢第一个。

【讨论】:

  • 如何将第一个表单与生成的 id 表一起使用(如 create table names( id number generated always as identity primary key, name varchar2(50) not null); 我得到 ORA-01400 cannot insert NULL into
  • 您不能将值插入generated always 列。使用insert into names(name) select 'a' from dual union all select 'b' from dual。 id会自动生成
  • 当然可以。只是不要把它的价值放在你的插入中。该值由 Oracle生成
  • 我一定错过了一些隐藏在视线中的东西。 INSERT INTO names(name) select 'Oliver' from dual union select 'Jack' from dual; 以 ORA-01400 结尾
【解决方案2】:

您可能还想查看http://plsql.ninja/npg/package/random_ninja。 Morten Egan 一直在构建一个非常有趣的实用程序库,他的 random_ninja 包将为您生成各种数据。

【讨论】:

    猜你喜欢
    • 2013-10-24
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多