如何在oracle中使用嵌套游标遍历同一张表[关闭]

Posted

技术标签:

【中文标题】如何在oracle中使用嵌套游标遍历同一张表[关闭]【英文标题】:How to traverse the same table with nested cursors in oracle [closed] 【发布时间】:2021-01-18 22:51:34 【问题描述】:

我遇到了一个 oracle 过程的问题,该过程使用两个嵌套游标循环同一个表。

从概念上讲,我有一个包含十列的表,从一到十编号。

第 1 列必须始终包含数据,因为它是主键。 第 10 列可能有数据,也可能没有数据,就像子列一样,如果没有数据,则为父记录,否则为子记录。

我需要在两个不同的表中插入父记录,而只在其中一个表中插入子记录。

为此,我创建了两个游标,一个选择父记录,另一个只选择子记录。

我将第 1 列(出现在子记录的第 10 列中)的值作为参数传递给第二个光标。

问题是它在完成第一个游标之前不会进入第二个游标,我需要它从第一个游标读取记录,输入第二个游标,读取存在的游标,然后返回到第一个游标。

谁能帮我解决这个问题?

从现在开始,感谢您的关注。

【问题讨论】:

请edit 使用minimal reproducible example 提出您的问题,包括:表和过程的DDL(CREATE TABLECREATE PROCEDURE)语句(请使其MINIMAL ,所以如果你可以做一个 3 列而不是 10 列的例子,那会很好);一些示例数据的 DML (INSERT) 语句可以证明问题;详细说明您希望如何转换该样本数据;您的预期输出。发布没有任何代码的问题会使我们很难知道我们是否在回答您认为您在问的问题;所以让它更容易,给我们一个例子。 在第一步中,如果您可以在没有光标的情况下解决它,请考虑一下。 【参考方案1】:

试试这样的:

begin

  for c in (select * from child_table) loop
  
    insert into table1
      select * from parent_table where column_1 = c.column_10;
  
    insert into table2
      select * from parent_table where column_1 = c.column_10;
  
    insert into table3
      (column_1,
       column_2,
       column_3,
       column_4,
       column_5,
       column_6,
       column_7,
       column_8,
       column_9,
       column_10)
    values
      (c.column_1,
       c.column_2,
       c.column_3,
       c.column_4,
       c.column_5,
       c.column_6,
       c.column_7,
       c.column_8,
       c.column_9,
       c.column_10);
  end loop;
end;

【讨论】:

以上是关于如何在oracle中使用嵌套游标遍历同一张表[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从存储过程中获取嵌套游标 - Java & Oracle

ORACLE 11G在存储过程里面遍历游标, 调用job任务定时运行

oracle如何关闭游标?

sql 游标如何循环

内部游标如何在oracle中使用外部游标的字段?

mysql存储过程 使用游标实现两张表数据同步数据