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;