繁体   English   中英

Oracle生成插入语句

[英]Oracle generate insert statements

我有大约10个表,可以使用select和join语句从中选择。 我使select语句正常工作,但想生成更多数据以确保它确实有效。

有没有一种简单的方法可以生成虚拟数据,而无需手动执行。 也就是说,如果从表中选择a.id = b.id上的a.id = b.id表b。 如何在不手动执行的情况下生成满足此要求的数据? 如果这没有意义,我可以更清楚地说明。 谢谢!!

使用LEVEL插入10行的简单示例-运行内部查询以查看结果:

INSERT INTO emp_test(empno)
(
 SELECT 1+LEVEL-1 FROM dual
  CONNECT BY LEVEL <= 10
)
/  

对于相关表(需要连接和引用完整性才能工作。)您必须编写一个pl / sql块或一组插入语句,一个接一个。

PL / SQL:-请参阅下文,了解如何生成多行...

Begin
  for v_rec in (select level from dual
                 connect by level <= 1000)
  loop
     create_new_dept (v_rec.level);
     create_1000_rows_for_dept(v_rec.level);
  end loop;
end;
/

或SQL:

--create 1000 departments.
insert into dept(deptno, dname)
select level, 'deptno ' || level
from dual
connect by level <= 1000;
commit;

--create 1000 employees for each department..
with emp as
(select level empid
  from dual
  connect by level <=1000
 )
insert into emp(empno, deptno, dname)
select deptno,
       emp_seq.nextval,
       'dname ' || 'emp ' || level empname
  from dept,
       emp; --no join condition, cartesian join on purpose
commit;

当表格彼此不相关时,有两种常见的方法。

使用DBMS_RANDOM,通过查询进行连接并生成多行。 例...

--This will insert 1000 rows {(1, emp1), (2,emp2)} and so on..
insert into emp (empno, ename)
select level, 'employee ' || level
from emp
connect by level <=1000;

使用dba_objects之类的表并进行多次插入以生成数据。 如果您想测试“基于函数的索引的性能”之类的情况,并且只要有很多数据,就不必真正在意它是什么数据,这将非常有用。

create table my_test_table
as
select * from dba_objects; --or user_objects, all_objects

--keep doubling rows until you have enough rows.
insert into my_test_table
select * from my_test_table;
commit;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM