Я создал GTT на уровне схемыСоздание экземпляров глобальной временной таблицы
CREATE GLOBAL TEMPORARY TABLE schema1.gtt1
(
col1 type1,
col2 type2,
...
)
ON COMMIT PRESERVE ROWS;
Теперь я могу ссылаться на таблицу из внутри PLSQL блока/процедуры/функции очень легко:
INSERT INTO schema1.gtt1
select col1, col2, ... from ...;
но что если в том же блоке PLSQL я хочу вставить значения в другую глобальную временную таблицу (GTT) с той же структурой, что и созданная мной?
Должен ли я создать еще один GTT и дать ему другое имя, даже если оно имеет ту же структуру (я думаю, это было бы неудобно)? или я могу каким-то образом создать несколько экземпляров GTT?
Не знаю, является ли это актуальным, но я буду присоединяться к GTT с другими таблицами в одном блоке PLSQL.
Каждая сессия имеет свои собственные разделенные данные в GTT, но только в одном экземпляре. Вы уверены, что на самом деле хотите GTT вообще, а не коллекции? В частности, если вам нужны несколько экземпляров (которые вы можете использовать с несколькими переменными одного и того же типа таблицы коллекций), которые существуют только в блоке PL/SQL? –
Также обратите внимание, что в 12c статистика о GTT также является сеансовой. – BobC
@Alex Poole, спасибо за ваш ответ, я думаю, что мне было трудно понять, почему вы должны объявлять объекты и таблицы на основе этих объектов вне plsql. Моя цель заключалась в создании функции, которая возвращала некоторые данные самым прямым способом (определяя и создавая все, что мне нужно, в одной и той же функции plsql, создавая подзапросы без необходимости «INTO»). Я как-то чувствую, что PLSQL имеет свой способ злоупотребления вещи, поэтому я пытался избежать коллекций вообще. Думаю, использование коллекций было бы подходящим путем для PLSQL. Поэтому я буду использовать их. – user1792210