Оператор SQL DB2 - возможно ли: а) объявить временную таблицу; б) заполнить ее данными, а затем в) выполнить для нее оператор выбора? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть доступ только для чтения к базе данных DB2, и я хочу создать временную таблицу «в полете / на лету», которая существует только в SQL, затем заполнить ее значениями, а затем сравнить результаты с существующей таблицей..

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

Может ли кто-нибудь помочь мне с тем, что я делаю неправильно, или посоветовать, что я пытаюсь сделать, возможно?(Или, возможно, лучший способ сделать что-то)

Спасибо, Джастин

--Create a table that only exists within the query 
DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMPEVENT (EVENT_TYPE INTEGER);

--Insert a value into the temporary table
INSERT INTO SESSION.TEMPEVENT (EVENT_TYPE) VALUES ('1');

--Select all values from the temporary table
SELECT * FROM SESSION.TEMPEVENT;

--Drop the table so the query can be run again
DROP TABLE SESSION.TEMPEVENT;

1 Ответ

0 голосов
/ 13 февраля 2019

Если вы посмотрите на синтаксическую диаграмму оператора DECLARE GLOBAL TEMPORARY TABLE , вы можете заметить следующий блок:

     .-ON COMMIT DELETE ROWS---.      
--●--+-------------------------+--●----------------------------  
     '-ON COMMIT PRESERVE ROWS-'      

Это означает, что ON COMMIT DELETE ROWS является поведением по умолчанию.Если вы выполняете свои операторы с включенным режимом autocommit, оператор commit автоматически генерируется после каждого оператора неявно, что удаляет все строки в вашем DGTT.
Если вы хотите, чтобы DB2 не удаляла строки в DGTT при фиксацииВы должны явно указать предложение ON COMMIT PRESERVE ROWS в объявлении DGTT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...