sql - ORA-30009 : Not enough memory for CONNECT BY operation/ORA-01788: CONNECT BY clause required in this query block

标签 sql oracle sqlplus connect-by

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

  1. 原始查询是这样的:
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/

    相关文章:

    sql - 如何从一个表的行获取值到另一个表的列

    Oracle - 检查空日期时出现不一致的数据类型错误

    vbscript - 恢复错误 WshShell.exec

    database - 如何在 docker 容器内的 Oracle 数据库上使用 sqlplus?

    sql - 按天分组数据

    sql - 如何使用具有外键的表在 Django 中高效地编写 DISTINCT 查询

    MySQL DISTINCT 没有过滤掉

    mysql - 用于获取一个月中某天的每个第一个事件(按日期时间字段)的 SQL 查询

    java - ORACLE RAW 字符串格式到标准 GUID

    java - 即使登录被拒绝,SQL*Plus 也会以 0 退出