Как DB2 будет обрабатывать временную таблицу, созданную в динамически вызываемом модуле? - PullRequest
0 голосов
/ 03 декабря 2018

Я подошел к концу своих знаний о DB2 и, похоже, не могу найти ответ на свой вопрос.

Я пишу общий модуль для обработки авторизации.Он вызывается динамически из других служб и возвращает временную таблицу с учетными записями, которые пользователь имеет право читать, вместе с некоторой дополнительной информацией.

Теперь мне интересно, как основные программы будут обрабатывать временную таблицу?Я объявил мою временную таблицу следующим образом ( на самом деле содержит больше столбцов ):

EXEC SQL
   DECLARE GLOBAL TEMPORARY TABLE  SESSION.PEG_AUTH
   ( 
     Account_ID      CHAR(10)
   )
END-EXEC

Основная программа не имеет никакой информации об объявлении временной таблицы,так будет ли иметь значение, если я, например, положу индекс в таблицу?Лично я не могу понять, как это будет работать, учитывая, что основной модуль компилируется без знания динамически вызываемого модуля.

Или это то, что основные программы SQL также выполняются динамически?

Причиной этого решения является то, что каждой программе, вызывающей этот модуль, потребуется доступ к базе данных и информация SELECT / FETCH из базы данных.

Любая помощь, поясняющая, как DB2 справляется с этим, очень ценится!

1 Ответ

0 голосов
/ 03 декабря 2018

Для Db2-LUW ссылки на таблицы сеансов (DGTT) динамически компилируются независимо от того, где они появляются.

Ваша основная программа (в COBOL) должна использовать то же соединение с базой данных, что и модульэто создает DGTT, иначе основная программа не сможет увидеть сессионную таблицу.Таким образом, вы не сможете использовать пул соединений.

Модуль может индексировать DGTT, когда сочтет нужным, без ведома основной программы.

Ваш вопрос показывает DGTT с одним столбцом, поэтому возникает вопрос, почему простого набора результатов будет недостаточно, если основной программе не нужно запросить таблицу сеансов с SQL или возможны дополнительные столбцы и т. Д.

...