【发布时间】:2020-01-09 23:00:11
【问题描述】:
这里是 Oracle 新手 - 我正在尝试运行插入语句来生成大量数据。
- 原来的查询是这样的:
INSERT INTO HR.fastData (ID)
SELECT 1 + (Level -1) * 1
FROM dual connect by Level < 100000000;
- 收到的第一个错误:
ORA-30009: 没有足够的内存用于 CONNECT BY 操作
-
我关注了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 子句
- 修改后的查询现在如下所示:
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 语句?非常感谢任何指导。
谢谢!
【问题讨论】:
-
语法是
connect by [boolean expression]- 也就是说,在connect by之后应该有一个计算结果为真或假的表达式,并且将继续添加行,直到它计算为真。connect by子句用于分层查询 (connect by prior key = parent_key),但前段时间发现它可以用作行生成器。其他行发生器结构可用,例如select rownum from xmltable('1 to 10000').
标签: sql oracle sqlplus connect-by