簡體   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