这里是 Oracle 新手 - 我正在尝试运行插入语句来生成大量数据。
- 原始查询是这样的:
INSERT INTO HR.fastData (ID)
SELECT 1 + (Level -1) * 1
FROM dual connect by Level < 100000000;
- 收到的第一个错误:
ORA-30009: Not enough memory for CONNECT BY operation
我关注了the guidance provided here
修改后的查询:
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);
- 我收到的下一个错误:
ORA-01788: CONNECT BY clause required in this query block
- 修改后的查询现在如下所示:
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 语句?将不胜感激任何指导。
谢谢!
最佳答案
您想要的查询似乎是
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);
我不能保证您的系统可以一次性生成所有这些数字,但原则上这是可行的。 Here's a db<>fiddle这表明当每个子查询限制为 10 个级别、总共生成 100 行时,此查询有效。
关于sql - ORA-30009 : Not enough memory for CONNECT BY operation/ORA-01788: CONNECT BY clause required in this query block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59673328/