powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Временная таблица - куда девается?
8 сообщений из 8, страница 1 из 1
Временная таблица - куда девается?
    #37297810
ДмитрийV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выполняю такой скрипт:
DECLARE GLOBAL TEMPORARY TABLE ContractCalcInf
(
Contract_ID integer null,
Calc decimal(18,2) null,
Privelege decimal(18,2) null,
PrivelegeCorrection decimal(18,2) null
)
in usertemporary2
WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

INSERT INTO ContractCalcInf(Contract_ID, Calc, Privelege, PrivelegeCorrection)
SELECT CPI.Contract_ID, CPI.Calc, 0, 0
FROM ContractCalc CPI
INNER JOIN PayDocDetail PDD ON PDD.PayDocDetail_ID = CPI.PayDocDetail_ID
INNER JOIN PayDoc PD ON PD.PayDoc_ID = PDD.PayDoc_ID
INNER JOIN Contract C ON C.Contract_ID = CPI.Contract_ID
INNER JOIN ProviderAccount PA ON PA.ProviderAccount_ID = C.ProviderAccount_ID
INNER JOIN Department D ON D.Department_ID = C.Department_ID
WHERE PD.Period = '01.01.2011' AND
PA.Department_ID = 48 AND
D.Provider_ID NOT IN (188, 1137)

скрипт выдаёт ошибку - не могу вставить поля со значением null. Если запустить без INSERT, с условием отбора хоть одного поля c null, то таких полей нет вовсе. А вставить невозможно. В ContractCalc - примерно 40 млн.записей. Уже при объявлении ContractCalcInf стал ставить WITH DEFAULT NULL - всё равно не даёт вставить. Сервак стоит дома на рабочей станции, выделенного сервера нет. В чём причина?
...
Рейтинг: 0 / 0
Временная таблица - куда девается?
    #37297956
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДмитрийV,

Таким insert вы вставляете записи не во временную таблицу, а в постоянную, из которой select делаете.
Именно поэтому, скорее всего, т.к. в insert не перечислены все non-null поля, вы и получаете такую ошибку.
Если надо всё же вставлять во временную, то:

Код: plaintext
INSERT INTO  SESSION. ContractCalcInf ...
...
Рейтинг: 0 / 0
Временная таблица - куда девается?
    #37297957
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс, ошибся: select вы делаете из ContractCalc, а не из ContractCalcInf, но дела это не меняет.
Постоянная таблица ContractCalcInf есть?
...
Рейтинг: 0 / 0
Временная таблица - куда девается?
    #37299410
ДмитрийV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Постоянной таблицы ContractCalcInf нет. Заметил ещё следующее - глюк № 2, раньше как-то не было: временная таблица не держится в памяти, хоть 20 раз повторяй её создание - она пересоздаётся. Раньше повторно не создавалась, писала, что уже создана. Сегодня уже другое сообщение (таблицу временную я создаю как TContractCalcInf) - вставлять некуда, т.к. объект не существует. Упарился уже
...
Рейтинг: 0 / 0
Временная таблица - куда девается?
    #37299767
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДмитрийVПостоянной таблицы ContractCalcInf нет.
Я правильно понял, что вторая команда скрипта:
скрипт
DECLARE GLOBAL TEMPORARY TABLE ContractCalcInf
(
Contract_ID integer null,
Calc decimal(18,2) null,
Privelege decimal(18,2) null,
PrivelegeCorrection decimal(18,2) null
)
in usertemporary2
WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

INSERT INTO SESSION.ContractCalcInf(Contract_ID, Calc, Privelege, PrivelegeCorrection)
SELECT CPI.Contract_ID, CPI.Calc, 0, 0
FROM ContractCalc CPI
INNER JOIN PayDocDetail PDD ON PDD.PayDocDetail_ID = CPI.PayDocDetail_ID
INNER JOIN PayDoc PD ON PD.PayDoc_ID = PDD.PayDoc_ID
INNER JOIN Contract C ON C.Contract_ID = CPI.Contract_ID
INNER JOIN ProviderAccount PA ON PA.ProviderAccount_ID = C.ProviderAccount_ID
INNER JOIN Department D ON D.Department_ID = C.Department_ID
WHERE PD.Period = '01.01.2011' AND
PA.Department_ID = 48 AND
D.Provider_ID NOT IN (188, 1137)
возвращает SQL0407N?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
>db2 "? sql407"


SQL0407N  Assignment of a NULL value to a NOT NULL column "<name>" is
      not allowed.

Explanation:

One of the following occurred:
...
Если да, то на какое поле ругается?
Если другой код ошибки, то покажите полностью сообщение об ошибке.
ДмитрийVЗаметил ещё следующее - глюк № 2, раньше как-то не было: временная таблица не держится в памяти, хоть 20 раз повторяй её создание - она пересоздаётся. Раньше повторно не создавалась, писала, что уже создана. Сегодня уже другое сообщение (таблицу временную я создаю как TContractCalcInf) - вставлять некуда, т.к. объект не существует. Упарился ужеПриведите последовательность команд и сообщение об ошибке.
...
Рейтинг: 0 / 0
Временная таблица - куда девается?
    #37301338
ДмитрийV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

С первой проблемой - вставкой значений null я разобрался: там вьюшка была ContractCalcInf - туда и собиралось вставляться. Сам создал - сам забыл. Теперь о временной таблице и её пропадании. Вот скрипт: как видите, я переименовал (на всякий случай) временную таблицу

DECLARE GLOBAL TEMPORARY TABLE TContractCalcInf
(
Contract_ID integer null,
Calc decimal(18,2) null,
Privelege decimal(18,2) null,
PrivelegeCorrection decimal(18,2) null
)
in usertemporary2
WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

INSERT INTO TContractCalcInf(Contract_ID, Calc, Privelege, PrivelegeCorrection)
SELECT CPI.Contract_ID, CPI.Calc, 0, 0
FROM ContractCalc CPI
INNER JOIN PayDocDetail PDD ON PDD.PayDocDetail_ID = CPI.PayDocDetail_ID
INNER JOIN PayDoc PD ON PD.PayDoc_ID = PDD.PayDoc_ID
INNER JOIN Contract C ON C.Contract_ID = CPI.Contract_ID
INNER JOIN ProviderAccount PA ON PA.ProviderAccount_ID = C.ProviderAccount_ID
INNER JOIN Department D ON D.Department_ID = C.Department_ID
WHERE PD.Period = '01.01.2011' AND
PA.Department_ID = 48 AND
D.Provider_ID NOT IN (188, 1137)

получаю следующее:
SQL0204N Имя "SOKOLOV.TCONTRACTCALCINF " не было определено.
sqlcode: -204

sqlstate: 42704



Если выполняю первую часть, то таблица создаётся. Повторяю - опять создаётся. Стало быть, она уничтожается после создания, ведь создание - "команда выполнена успешно". В чем проблема?
...
Рейтинг: 0 / 0
Временная таблица - куда девается?
    #37301464
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДмитрийV,

Ещё раз.

Несмотря на то, что вы можете использовать в DECLARE GLOBAL TEMPORARY TABLE имя времиенной таблицы без указания схемы (тогда таблица всё равно создастся в схеме SESSION):

Код: plaintext
1.
DECLARE GLOBAL TEMPORARY TABLE TContractCalcInf 
...

вы НЕ МОЖЕТЕ обращаться к ней без указания явно имени схемы (SESSION), если только ранее в этой сессии вы не переопределили схему по-умолчанию, например, выполнив:
Код: plaintext
set schema=SESSION
или не выставили её в свойствах соединения.

Т.е. вы должны обращаться к ней так:

Код: plaintext
1.
INSERT INTO  SESSION. TContractCalcInf(Contract_ID, Calc, Privelege, PrivelegeCorrection)
...

а не:

Код: plaintext
1.
INSERT INTO TContractCalcInf(Contract_ID, Calc, Privelege, PrivelegeCorrection)
...
...
Рейтинг: 0 / 0
Временная таблица - куда девается?
    #37303231
ДмитрийV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Спасибо огромное, заработало. Уже 6 минут вертится, не вылетело ничего. Ещё раз - спасибо.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Временная таблица - куда девается?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]