2

这里是 Oracle 新手 - 我正在尝试运行插入语句来生成大量数据。

  1. 原始查询是这样的:
INSERT INTO HR.fastData (ID) 
SELECT 1 + (Level -1) * 1 
FROM dual connect by Level < 100000000;
  1. 收到的第一个错误:

ORA-30009: 没有足够的内存用于 CONNECT BY 操作

  1. 我遵循了此处提供的指导

    修改后的查询:

INSERT INTO HR.fastData (ID) 
SELECT 1 + (Level -1) * 1 
FROM
    (select level from dual connect by Level < 10000),
    (select level from dual connect by Level < 10000);
  1. 我收到的下一个错误:

ORA-01788: 此查询块中需要 CONNECT BY 子句

  1. 修改后的查询现在如下所示:
INSERT INTO HR.fastData (ID) 
SELECT 1 + (Level -1) * 1 
FROM DUAL CONNECT BY 
     (select Level from dual connect by Level < 10000),
     (select Level from dual connect by level < 10000);

在多次尝试不同的查询变体之后,我无法让它正确执行。我CONNECT BY是否正确使用/放置语句?将不胜感激任何指导。

谢谢!

4

2 回答 2

3

看来您想要的查询是

SELECT ((lvl1-1)*10) + (lvl2-1) + 1 as ID
  FROM (select level as lvl1 from dual connect by Level <= 10000)
  CROSS JOIN (select level as lvl2 from dual connect by Level <= 10000);

我不能保证您的系统可以一次性生成所有这些数字,但原则上这是可行的。这是一个 db<>fiddle,它显示当每个子查询限制为 10 个级别时,此查询有效,总共生成 100 行。

于 2020-01-10T04:00:12.593 回答
1
var x number;
exec :x := 10;
SELECT          level FROM dual connect by level <= :x
union all
select 1 * :x + level from dual connect by level <= :x
union all
select 2 * :x + level from dual connect by level <= :x
union all
select 3 * :x + level from dual connect by level <= :x;
于 2020-01-10T04:18:14.920 回答