У меня есть база данных со многими пользователями, которые имеют одну и ту же таблицу (под одним и тем же я подразумеваю одни и те же столбцы, но разные данные). Я хотел бы запустить один и тот же запрос для этих таблиц и массово собрать результаты во временную таблицу или любой другой способ просмотра. Пока у меня есть код, показанный ниже:
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 и помещает результаты в созданную мной таблицу (COLLECTIONTBL). Я искал на этом форуме и в других местах и увидел, что могу сделать это с помощью команды fetch. Однако команду fetch необходимо поместить в курсор, который выдает ошибку каждый раз, когда я помещаю ее в цикл. Важно отметить, что я хотел бы объединить результаты всех итераций в COLLECTIONTBL.