2017-02-17 4 views
0

Я создал 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.

+1

Каждая сессия имеет свои собственные разделенные данные в GTT, но только в одном экземпляре. Вы уверены, что на самом деле хотите GTT вообще, а не коллекции? В частности, если вам нужны несколько экземпляров (которые вы можете использовать с несколькими переменными одного и того же типа таблицы коллекций), которые существуют только в блоке PL/SQL? –

+0

Также обратите внимание, что в 12c статистика о GTT также является сеансовой. – BobC

+0

@Alex Poole, спасибо за ваш ответ, я думаю, что мне было трудно понять, почему вы должны объявлять объекты и таблицы на основе этих объектов вне plsql. Моя цель заключалась в создании функции, которая возвращала некоторые данные самым прямым способом (определяя и создавая все, что мне нужно, в одной и той же функции plsql, создавая подзапросы без необходимости «INTO»). Я как-то чувствую, что PLSQL имеет свой способ злоупотребления вещи, поэтому я пытался избежать коллекций вообще. Думаю, использование коллекций было бы подходящим путем для PLSQL. Поэтому я буду использовать их. – user1792210

ответ

0

У вас есть 2 стола, A и B с одинаковой структурой. (GTT, но доступ к нему с того же сеанса, чтобы мы могли игнорировать это) Ваш вопрос должен быть вставлен как во время выполнения, так и для одного из них?

Это вопрос, на который вы можете ответить только на основании значения того, что вы вставляете, и необходимости дифференцировать записи. Если вам нужно сделать разницу между этими двумя наборами записей (что вы вставляете в A и что в B), но у вас нет ключа, чтобы сделать это различие, чем вам нужно: добавьте новый столбец в структуре типа «источник» или вставлять в разные таблицы.

Существует нет концепции множественных экземпляров GTT в сеансе, поэтому это не будет делать трюк.

Смежные вопросы