Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Временная таблица - куда девается?
|
|||
|---|---|---|---|
|
#18+
Выполняю такой скрипт: 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 - всё равно не даёт вставить. Сервак стоит дома на рабочей станции, выделенного сервера нет. В чём причина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2011, 23:05 |
|
||
|
Временная таблица - куда девается?
|
|||
|---|---|---|---|
|
#18+
ДмитрийV, Таким insert вы вставляете записи не во временную таблицу, а в постоянную, из которой select делаете. Именно поэтому, скорее всего, т.к. в insert не перечислены все non-null поля, вы и получаете такую ошибку. Если надо всё же вставлять во временную, то: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 05:59 |
|
||
|
Временная таблица - куда девается?
|
|||
|---|---|---|---|
|
#18+
Упс, ошибся: select вы делаете из ContractCalc, а не из ContractCalcInf, но дела это не меняет. Постоянная таблица ContractCalcInf есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 06:01 |
|
||
|
Временная таблица - куда девается?
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Постоянной таблицы ContractCalcInf нет. Заметил ещё следующее - глюк № 2, раньше как-то не было: временная таблица не держится в памяти, хоть 20 раз повторяй её создание - она пересоздаётся. Раньше повторно не создавалась, писала, что уже создана. Сегодня уже другое сообщение (таблицу временную я создаю как TContractCalcInf) - вставлять некуда, т.к. объект не существует. Упарился уже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2011, 18:59 |
|
||
|
Временная таблица - куда девается?
|
|||
|---|---|---|---|
|
#18+
Дмитрий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) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Если другой код ошибки, то покажите полностью сообщение об ошибке. ДмитрийVЗаметил ещё следующее - глюк № 2, раньше как-то не было: временная таблица не держится в памяти, хоть 20 раз повторяй её создание - она пересоздаётся. Раньше повторно не создавалась, писала, что уже создана. Сегодня уже другое сообщение (таблицу временную я создаю как TContractCalcInf) - вставлять некуда, т.к. объект не существует. Упарился ужеПриведите последовательность команд и сообщение об ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 03:32 |
|
||
|
Временная таблица - куда девается?
|
|||
|---|---|---|---|
|
#18+
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 Если выполняю первую часть, то таблица создаётся. Повторяю - опять создаётся. Стало быть, она уничтожается после создания, ведь создание - "команда выполнена успешно". В чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 21:28 |
|
||
|
Временная таблица - куда девается?
|
|||
|---|---|---|---|
|
#18+
ДмитрийV, Ещё раз. Несмотря на то, что вы можете использовать в DECLARE GLOBAL TEMPORARY TABLE имя времиенной таблицы без указания схемы (тогда таблица всё равно создастся в схеме SESSION): Код: plaintext 1. вы НЕ МОЖЕТЕ обращаться к ней без указания явно имени схемы (SESSION), если только ранее в этой сессии вы не переопределили схему по-умолчанию, например, выполнив: Код: plaintext Т.е. вы должны обращаться к ней так: Код: plaintext 1. а не: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 23:05 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=37299410&tid=1602222]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 138ms |

| 0 / 0 |
