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

For loop 如何在PL/SQL代码的for循环中创建游标并将结果批量收集到表中,for-loop,plsql,cursor,bulk,For Loop,Plsql,Cursor,Bulk,我有一个数据库,其中有许多用户具有相同的表(相同的意思是相同的列,但数据不同)。我希望在这些表上运行相同的查询,并将结果批量收集到临时表或任何其他查看方式中。 到目前为止,我的代码如下所示: DECLARE TYPE PDTABLE_12SEGTBL IS TABLE OF MTO_SG2420.PDTABLE_12%ROWTYPE; COLLECTIONTBL PDTABLE_12SEGTBL; LoopIteration pls_integer; CompTblName va

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

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变量中,我在每次迭代中成功地存储了包括username在内的完整表名。
我的问题是如何向上面的代码中添加一个查询,该查询在变量CompTblName上运行select语句,并将结果推送到我创建的表中(
COLLECTIONTBL
)。我在这个论坛和其他地方搜索了一下,发现我可以使用fetch命令来完成这个任务。然而,fetch命令需要放在游标中,每当我将它放在循环中时,游标就会给出一个错误。需要注意的是,我想将所有迭代的结果连接到
COLLECTIONTBL

中,您需要使用
executeimmediate
语句,该语句允许创建和运行动态SQL:

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

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

您需要使用
executeimmediate
语句,该语句允许创建和运行动态SQL:

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

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