SQL 中将游标循环查询的结果插入到临时表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 中将游标循环查询的结果插入到临时表中相关的知识,希望对你有一定的参考价值。

在Sql中通过游标将数据循环取出,取出后想把结果保存在一个表中,在这里我用的临时表,如何在循环时插入临时表啊?循环时提示临时表已经存在,drop的话我还要保存数据,还不可以drop,有没有好方法啊?

你循环时是否用了创建临时表的语句?如select .... into #temp from ..
先建临时表,循环用insert
select .... into #temp from .. where 1=2
while 条件
begin
insert into #temp....
end
这样应该就会没问题
参考技术A 循环一次 insert一次这样不行吗?一条记录一条记录的插

如何在 PL/SQL 代码的 for 循环中创建游标并将结果批量收集到表中

【中文标题】如何在 PL/SQL 代码的 for 循环中创建游标并将结果批量收集到表中【英文标题】:How to create a cursor within for loop of PL/SQL Code and bulk collect results into table 【发布时间】:2016-12-20 20:04:22 【问题描述】:

我有一个数据库,其中包含许多具有相同表的用户(相同的意思是相同的列但不同的数据)。我想对这些表运行相同的查询并将结果批量收集到临时表或任何其他查看方式中。 到目前为止,我的代码如下所示:

DECLARE
  TYPE PDTABLE_12SEGTBL IS TABLE OF MTO_SG2420.PDTABLE_12%ROWTYPE;
  COLLECTIONTBL PDTABLE_12SEGTBL;
  LoopIteration pls_integer;
  CompTblName varchar2(61);

  CURSOR MTO_Cursor IS
    SELECT owner, table_name 
    FROM   ALL_TABLES 
    WHERE  OWNER LIKE 'MTO_K%' 
    AND    TABLE_NAME = 'PDTABLE_12';
BEGIN
  LoopIteration :=1;

  FOR item IN MTO_Cursor
  LOOP
    CompTblName := item.owner || '.pdtable_12';

    DBMS_OUTPUT.PUT_LINE('Loop Iteration ' || LoopIteration || ' CompTblName' || CompTblName);

    LoopIteration := LoopIteration + 1;
  END LOOP;
END;

我要运行查询的表如下所示:

MTO_K01.pdtable_12
MTO_K02.pdtable_12
MTO_K03.pdtable_12
MTO_K04.pdtable_12
MTO_K05.pdtable_12

在 CompTblName 变量中,我通过每次迭代成功存储了完整的表名,包括用户名。 我的问题是如何向上面的代码添加一个查询,该查询在变量 CompTblName 上运行 select 语句并将结果推送到我创建的表中 (COLLECTIONTBL)。我在这个论坛和其他地方搜索,发现我可以使用 fetch 命令来做到这一点。但是,需要将 fetch 命令放在一个游标中,每次我将它放在一个循环中时都会出错。需要注意的是,我想将所有迭代的结果连接到COLLECTIONTBL

【问题讨论】:

【参考方案1】:

您需要使用execute immediate 语句,它允许创建和运行动态SQL:

FOR item IN MTO_Cursor LOOP
    CompTblName := item.owner || '.pdtable_12';

    execute immediate 'insert into COLLECTIONTBL select * from ' || CompTblName;
  END LOOP;

【讨论】:

以上是关于SQL 中将游标循环查询的结果插入到临时表中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PL/SQL 代码的 for 循环中创建游标并将结果批量收集到表中

SQL用循环查询的结果 建临时表

SQL临时表使用

mysql创建临时表,将查询结果插入已有表中

SQL游标怎么循环更新

在 Sql Server 中,如何将游标中的值放入临时表中?