Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / О временных таблицах замолвите слово... / 25 сообщений из 177, страница 1 из 8
23.12.2004, 15:43
    #32842078
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Топик навеян периодическими воплями на тему, что "наши временные таблицы - более "временные", чем ваши" ;-) Последний раз тему затронули вчера в соседнем топике. Разговор не ограничивается Oracle и MSSQL, так что апологеты других серверов могут подключаться.

Итак, ведем дискуссию о реализации временных таблиц в различных серверах. Для начала заглянем в SQL-стандарт. Там мы видим во-первых деление на глобальные (далее GTT) и локальные (далее LTT) временные таблицы.

GTT создаются с помощью CREATE GLOBAL TEMPORARY TABLE. Характеризуются глобальной видимостью метаданных (они лежат в общей схеме) и сеансовой видимостью данных. Т.е. наличие GTT видят все, но каждая сессия работает со своей копией данных. Если посмотреть на существующие СУБД, то почти все реализуют (с тем или иным синтаксисом) эту возможность. Исключения - DB2 (DECLARE GLOBAL, однако видимость метаданных сессионная), а также PostgreSQL и MySQL - нет этой фичи вообще. Один нюанс - MSSQL (и полагаю, что Sybase ASE также) разделяет данные GTT между сессиями. Никто больше этого не делает.

LTT бывают <created> и <declared>. Первые создаются через CREATE LTT и характеризуются сессионной видимостью метаданных. Это означает, что две сессии могут создать разные по структуре CLTT с одинаковым имеем. Разумеется, видимость данных тоже сессионная. Oracle не поддерживает CLTT (как минимум в 9i), также как Sybase ASA и InterBase. Второй класс LTT создается через DECLARE LTT и подразумевает видимость (как метаданных, так и данных) только в пределах текущего модуля (SQL client module). Увы, стандартное понятие модуля достаточно туманно/спорно и, похоже, производители предпочитают трактовать DLTT как внутрипроцедурные таблицы. Oracle и MSSQL имеют такую возможность (в том или ином виде), на счет остальных СУБД у меня информации нет.

На практике, лично у меня вообще очень редко возникала необходимость во временных таблицах. И если уж и возникала, то исключительно в GTT (сгенерить данные для сложного отчета процедурой и натравить потом на них Crystal Reports) или в DLTT (если процедурный расчет нельзя выполнить за один прогон исходных данных). Допускаю, что CLTT также могут быть полезны при вынесении логики из базы.

У меня всего два вопроса. Первый - почему Oracle (и кое-кто еще) не поддерживают CLTT? Есть какие-либо технические проблемы? Или просто сочли ненужными и забили болт? Второй - какого фига мелкомягкие GTT разделяют данные? На кой тогда вообще это надо?

Также хотелось бы услышать о ситуациях, в которых люди применяют временные таблицы. Особенно - почему нелья обойтись без них? Если кто-то хочет поговорить о других вещах, как-то: механизмы хранения временных данных или нюансы отработки ON COMMIT { PRESERVE | DELETE } ROWS - welcome. Если я в чем-то ошибся насчет какой-либо СУБД - поправьте.
...
Рейтинг: 0 / 0
23.12.2004, 15:47
    #32842094
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
IMHO Oracle не поддерживает локальные временные таблицы, потому-что это фактически DDL в продакт коде, т.е. очень очень плохо. Возможно MSSQL к этому относится терпимее но в Oracle это настоящий гиморой.
...
Рейтинг: 0 / 0
23.12.2004, 15:50
    #32842105
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Кстати, необходимость во временных таблицах вообще в Oracle возникает крайне редко. Практически любой отчет можно сформулировать одним запросом. И даже если запрос получится очень махровым оптимизатор с ним справится. До введения аналитических функций (8i) проблему представляли запросы типа "нарастающий итог", что касается "деревянных" расширений, они есть уже в 7-ке.
...
Рейтинг: 0 / 0
23.12.2004, 15:57
    #32842124
Yo!
Yo!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
авторПервый - почему Oracle (и кое-кто еще) не поддерживают CLTT? Есть какие-либо технические проблемы? Или просто сочли ненужными и забили болт?

во первых идеологическая проблема, на временые таблицы оракла можно вещать вью и тригеры, а это значит что дефиниция этой таблицы должна быть в словаре базы и соответственно не может быть разной для разных пользователей.
наверника если задуматся это можно было бы как-то обойти с помощью синонимов и т.п. но поскольку мало кто придумал задачу в которой бы такое понадобилось, то и решать эту "проблему" видно не собираются.
...
Рейтинг: 0 / 0
23.12.2004, 16:00
    #32842134
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Gluk (Kazan)IMHO Oracle не поддерживает локальные временные таблицы, потому-что это фактически DDL в продакт коде, т.е. очень очень плохо. Возможно MSSQL к этому относится терпимее но в Oracle это настоящий гиморой.

Об этом я тоже думал. И в курсе, насколько Оракл это не любит. Но фишка в том, что термин "очень плохо" не дойдет до людей, у которых СУБД такие вещи принимает легко. Для них это норма. Думать все начинают уже после того, как что-то не получилось :-(
...
Рейтинг: 0 / 0
23.12.2004, 16:03
    #32842148
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Yo!во первых идеологическая проблема, на временые таблицы оракла можно вещать вью и тригеры, а это значит что дефиниция этой таблицы должна быть в словаре базы и соответственно не может быть разной для разных пользователей.

Это не ответ. Ты описал возможности Оракла в отношении GTT. Кто им мешает ввести ограничения для LTT? И вообще, почему нельзя разграничить видимость словаря базы? Например, через namespace/schema + session_id? Т.е. это не идеологическая проблема, по крайней мере, в этом ракурсе.
...
Рейтинг: 0 / 0
23.12.2004, 16:06
    #32842160
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
авторOracle не поддерживает CLTT (как минимум в 9i), также как Sybase ASA и InterBase.
В Sybase ASA есть - CREATE TABLE #TableName в целях совместимостью с MSSQL. Но этим пользоваться не интересно, так как на такую форму записи не навесишь различные параметры времянки (тот же флаг NOT TRANSACTIONAL), как в DECLARE LOCAL TEMPORARY TABLE.

авторУвы, стандартное понятие модуля достаточно туманно/спорно и, похоже, производители предпочитают трактовать DLTT как внутрипроцедурные таблицы. Oracle и MSSQL имеют такую возможность (в том или ином виде), на счет остальных СУБД у меня информации нет.
В ASA cуществует понятие блоков видимости и атомарности. Так что в этом коде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
BEGIN
  BEGIN
    DECLARE LOCAL TEMPORARY TABLE @T (id int);
    SELECT * FROM @T;
  END;

  SELECT * FROM @T;
END;
второй SELECT вернет ошибку о несуществующей @T. В отличие от переменных, времянки имеют область видимости в вложенных вызовах других процедур, это же относиться и к триггерным Inserted/Deleted, которые выступают как полноценные времянки, так что обьявленная в процедуре или триггере времянка спокойно и везде видиться на всех вложенных уровнях вызовов.

авторНа практике, лично у меня вообще очень редко возникала необходимость во временных таблицах. И если уж и возникала, то исключительно в GTT (сгенерить данные для сложного отчета процедурой и натравить потом на них Crystal Reports) или в DLTT (если процедурный расчет нельзя выполнить за один прогон исходных данных).
То же самое один в один. Плюс иногда полезно через DLTT предварительно загнать небольшое кол-во многократно используемых и рассчитываемых данных, которые фигурируют в очень сложном и большом запросе, чтобы оптимизатор лишний раз не сходил с ума и видно, что от этого только выиграешь.

авторТакже хотелось бы услышать о ситуациях, в которых люди применяют временные таблицы. Особенно - почему нелья обойтись без них? Если кто-то хочет поговорить о других вещах, как-то: механизмы хранения временных данных или нюансы отработки ON COMMIT { PRESERVE | DELETE } ROWS - welcome. Если я в чем-то ошибся насчет какой-либо СУБД - поправьте.
В ASA помимо ON COMMIT { PRESERVE | DELETE } есть еще NOT TRANSACTIONAL. Вот и вся разница. Остальное тоже самое. Так же можно и триггера на GTT катать, очень удобно иногда.

авторУ меня всего два вопроса. Первый - почему Oracle (и кое-кто еще) не поддерживают CLTT? Есть какие-либо технические проблемы? Или просто сочли ненужными и забили болт? Второй - какого фига мелкомягкие GTT разделяют данные? На кой тогда вообще это надо?
Гм - зачем нужны CLTT, когда есть GTT - это гораздо удобнее. Думаю если бы у MSSQL и ASE были GTT, никто этими CLTT и не пользовался бы. Во вторых разделяют, потому как механизм так криво реализован по моему личному мнению. В ASE кстати номер с ## (глобальными MS времянками) вообще не прокатывает - нет там такого. Плюс эти ## у MSSQL имеют нехорошую тенденцию удалятся при завершении той сессии, которая их создала, так что лично я так и не смог придумать им хоть какое то разумное применение (может и плохо думал, кто знает).
...
Рейтинг: 0 / 0
23.12.2004, 16:07
    #32842164
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Gluk (Kazan)Кстати, необходимость во временных таблицах вообще в Oracle возникает крайне редко. Практически любой отчет можно сформулировать одним запросом. И даже если запрос получится очень махровым оптимизатор с ним справится.

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

ЗЫ. Щаз придут фанаты сиквела и все опровергнут ;-)
...
Рейтинг: 0 / 0
23.12.2004, 16:16
    #32842189
segun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
где-то неподалеку слышен тоскливый вой бродячей собаки..
и вот, гаснет свет и двери начинают меедленно открываться..
неужели это снова пришли ОНИ??

страшно? :)
...
Рейтинг: 0 / 0
23.12.2004, 16:17
    #32842198
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
dimitrОб этом я тоже думал. И в курсе, насколько Оракл это не любит. Но фишка в том, что термин "очень плохо" не дойдет до людей, у которых СУБД такие вещи принимает легко. Для них это норма. Думать все начинают уже после того, как что-то не получилось :-(

Нууу не надо быть Энштейном, чтобы понять - что одна СУБД воспринимает хорошо, то другая может воспринимать очччень плохо. Только не надо сразу говорить, что это минус. Это может быть и плюс
...
Рейтинг: 0 / 0
23.12.2004, 16:19
    #32842204
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
dimitrТут согласен, хотя оптимизатор зачастую все же не справляется. Т.е. получается, что богатый набор языковых фич в большинстве случаев отменяет необходимость во временных таблицах. Но так ли это на практике?


Если оптимизатор в КОНКРЕТНОМ случае не справляется, это задача для тюнинга :)
...
Рейтинг: 0 / 0
23.12.2004, 16:19
    #32842205
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
я GTT в DB2 использую как правило в качестве меток к записям в пользовательской выборке. Присоединяешь к основной таблице левым джойном - и красота...)
...
Рейтинг: 0 / 0
23.12.2004, 16:20
    #32842210
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
ASCRUSГм - зачем нужны CLTT, когда есть GTT - это гораздо удобнее.

Чтобы создавать нужные таблицы динамически в сессиях, не заботясь о том, есть ли уже другие с такми же именем. Для меня это нонсенс, правда, но многие по-другому думать не умеют, похоже ;-)

К слову, искренне рад за ASA. Хоть и не люблю блокировочники вообще (говорил уже, что готовить не умею), но ASA мне наиболее приятен.
...
Рейтинг: 0 / 0
23.12.2004, 16:22
    #32842215
segun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
в MS SQL глобальные временные таблицы лично я никогда не использовал (за ненадобностью, ИМХО), а вот локальные - да. Иногда, для помощи оптимизатору, я разбивал большой запрос с джоинами к многомилионным таблицам на пару-тройку более простых и промежуточные результаты записывал в локальную врем.таблицу. Потом появились переменные типа table и необходимость даже в локальных врем таблицах еще больше снизилась.
...
Рейтинг: 0 / 0
23.12.2004, 16:24
    #32842225
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Локальные временные таблицы теоретически могут пригодиться, если каждый раз требуется таблица ДРУГОЙ структуры, но я не могу придумать задачу, в которой это было-бы НЕОБХОДИМО. И в Oracle, минусы от такой фичи существенно перевесят плюсы.
...
Рейтинг: 0 / 0
23.12.2004, 16:24
    #32842228
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
segunв MS SQL глобальные временные таблицы лично я никогда не использовал (за ненадобностью, ИМХО), а вот локальные - да. Иногда, для помощи оптимизатору, я разбивал большой запрос с джоинами к многомилионным таблицам на пару-тройку более простых и промежуточные результаты записывал в локальную врем.таблицу. Потом появились переменные типа table и необходимость даже в локальных врем таблицах еще больше снизилась.
Аналогично.

-- Tygra's --
...
Рейтинг: 0 / 0
23.12.2004, 16:26
    #32842234
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Gluk (Kazan)Если оптимизатор в КОНКРЕТНОМ случае не справляется, это задача для тюнинга :)

Или для баг-репорта производителю :)
...
Рейтинг: 0 / 0
23.12.2004, 16:28
    #32842242
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
На моей (не очень богатой) практике не было случая, когда не удавалось найти какое-либо приемлимое решение НА МЕСТЕ
...
Рейтинг: 0 / 0
23.12.2004, 16:29
    #32842247
Alex.Czech
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
В MS SQL одно из наиболее частых применений временных таблиц - сказать
INSERT INTO #ttable
EXEC <какая-то-совсем-чужая-процедура-которую-нагибать-под-себя-страшно-или-невозможно>

Кстати, как такие проблемы решают в Оракл, я не совсем понимаю до сих пор. Юзать REF CURSOR ? Дык по нему потом пройтись придется с песнями и плясками курсором, чтобы заюзать в своем запросе в качестве элемента; или я неправ ?
...
Рейтинг: 0 / 0
23.12.2004, 16:30
    #32842249
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
gardenmanя GTT в DB2 использую как правило в качестве меток к записям в пользовательской выборке. Присоединяешь к основной таблице левым джойном - и красота...)

Кстати да, про такое применение я и забыл. Вполне удобно.
...
Рейтинг: 0 / 0
23.12.2004, 16:45
    #32842290
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
dimitrУ меня всего два вопроса. Первый - почему Oracle (и кое-кто еще) не поддерживают CLTT? Есть какие-либо технические проблемы? Или просто сочли ненужными и забили болт?
Я бы сказал так: техническая возможность есть, но я отлично понимаю нежелание их делать.

Оракл стремится перенести максимум нагрузки на этап компиляции кода и соответственно максимально разгрузить (и за счет этого убыстрить) этап выполнения. В ситуации, когда одна процедура создает таблицу, а другая делает из нее селект, о таком желании можно забыть.

Соответственно, технически такая возможность есть (через динамический SQL), но это надо делать специально. Грубо говоря, компилятор не встраивает поддержку заведомо неэффективного режима.

Мало того: уже достаточно давно существует поддержка nested tables, которые аналогичны подобным "сугубо временным" таблицам. То есть: из них можно делать селекты, также с ними можно работать как с массивами.

dimitrОб этом я тоже думал. И в курсе, насколько Оракл это не любит. Но фишка в том, что термин "очень плохо" не дойдет до людей, у которых СУБД такие вещи принимает легко. Для них это норма.
Вопрос в том, что эти люди даже не пытаются думать об эффективности кода, который пишут. Перейдя на Оракл, люди - типично - начинают пытаться работать с ним именно так, не пытаясь разобраться, хорошо это (для Оракла) или плохо. Поэтому, полагаю, они и на родном сервере не задавались этим вопросом.

В такой ситуации я всячески поддерживаю нежелание встраивать "фичу для торможения". Тем паче, что ни малейшей необходимости нет.
...
Рейтинг: 0 / 0
23.12.2004, 16:48
    #32842299
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Alex.CzechКстати, как такие проблемы решают в Оракл, я не совсем понимаю до сих пор. Юзать REF CURSOR ? Дык по нему потом пройтись придется с песнями и плясками курсором, чтобы заюзать в своем запросе в качестве элемента; или я неправ ?

А явные курсоры в Oracle НЕ ЕСТЬ ЗЛО
...
Рейтинг: 0 / 0
23.12.2004, 16:50
    #32842308
Alex.Czech
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Gluk (Kazan) Alex.CzechКстати, как такие проблемы решают в Оракл, я не совсем понимаю до сих пор. Юзать REF CURSOR ? Дык по нему потом пройтись придется с песнями и плясками курсором, чтобы заюзать в своем запросе в качестве элемента; или я неправ ?

А явные курсоры в Oracle НЕ ЕСТЬ ЗЛО

Да лана... пройтись курсором по тыще строчек - не есть зло ? :) Или есть все-таки какая-то возможность bulk collect-а из REF CURSOR ?
...
Рейтинг: 0 / 0
23.12.2004, 17:00
    #32842338
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Зависит от конкретной задачи. Ходить по 1000 строчек и в MSSQL не гут.
Давайте не будем разводить на эту тему флейм, тема так хорошо началась :)
...
Рейтинг: 0 / 0
23.12.2004, 17:07
    #32842361
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О временных таблицах замолвите слово...
Я не фанат, просто мне интересно как можно что-то делать без временных таблиц. Вот пример куска реального триггера на изменение остатков при вставке проводок
автор declare @accstm_c table(
bln varchar(15),
fond varchar(15),
date datetime,
acc varchar(30),
s dec(19,6),
d dec(19,6),
c dec(19,6))

insert @accstm_c
select bln, fond, date, dacc acc, summa s, summa d, @nil c
from inserted
insert @accstm_c
select bln, fond, date, cacc, -summa,@nil,summa
from inserted
insert @accstm_c
select bln, fond, date, dacc, -summa,-summa,@nil
from deleted
insert @accstm_c
select bln, fond, date, cacc, summa,@nil,-summa
from deleted

declare @accstm_p table(
bln varchar(15),
fond varchar(15),
date datetime,
acc varchar(30),
s dec(19,6),
d dec(19,6),
c dec(19,6))

insert @accstm_p
select bln,fond,date, acc, sum(s) s,sum(d) d,sum(c) c
from @accstm_c -- изменение остатка,
group by bln,fond,date,acc -- дебета и кредита при проводке

insert @accstm_p
select bln,fond,'20651031', acc, 0,0,0
from @accstm_p
group by bln,fond, acc

declare @accstm_d table(
bln varchar(15),
fond varchar(15),
acc varchar(30),
date1 datetime null,
date2 datetime null)

insert into @accstm_d
select p.bln,p.fond,p.acc, p.date date1, min(s.date) date2
from @accstm_p p, @accstm_p s -- выбираются интервалы дат
where p.bln=s.bln -- для вычисления поправок остатков
and p.fond=s.fond
and p.acc=s.acc
and p.date<s.date
group by p.bln,p.fond,p.acc, p.date


declare @accstm_s table(
bln varchar(15),
fond varchar(15),
acc varchar(30),
date1 datetime null,
date2 datetime null,
s dec(19,6))

insert into @accstm_s
select p.bln,p.fond,p.acc,d.date1 date1, d.date2, sum(p.s) s
from @accstm_p p, @accstm_d d
where p.bln=d.bln -- для вычисления поправок остатков
and p.fond=d.fond
and p.acc=d.acc
and d.date1>=p.date
group by p.bln,p.fond,p.acc, d.date1, d.date2

declare @accstm_n table(
bln varchar(15),
fond varchar(15),
date datetime null,
acc varchar(30),
s dec(19,6))

insert into @accstm_n
select bln,fond,date,acc,@nil s -- выборка недостающих состояний
from @accstm_p p -- счетов
where date<>'20651031'
and (s<>0 or d<>0 or c<>0)
and not exists(select * from AccState s
where p.bln=s.bln
and p.fond=s.fond
and p.acc=s.acc
and p.date=s.date)

declare @accstm_v table(
bln varchar(15),
fond varchar(15),
date datetime,
acc varchar(30),
dp datetime null)

insert into @accstm_v
select n.bln,n.fond,n.date,n.acc, max(s.date) dp
from @accstm_n n, AccState s
where n.bln=s.bln
and n.fond=s.fond -- выборка дат предыдущих движений
and n.acc=s.acc -- для счетов с недостающими остатками
and n.date>s.date
group by n.bln,n.fond,n.date,n.acc


update @accstm_n
set s=s.s -- вычисление остатков
from @accstm_n n, AccState s, @accstm_v v
where n.bln=v.bln
and n.fond=v.fond
and n.acc=v.acc
and n.date=v.date
and v.bln=s.bln
and v.fond=s.fond
and v.acc=s.acc
and v.dp=s.date


insert AccState(bln,fond,date, acc,dt,cr,s)
select bln,fond,date,acc,0,0,s -- вставка недостающих состояний
from @accstm_n -- счетов

update AccState -- пересчет остатков
set s=a.s+s.s
from AccState a, @accstm_s s
where a.bln=s.bln
and a.fond=s.fond
and a.acc=s.acc
and a.date>=s.date1 and a.date<s.date2

update AccState -- пересчет оборотов
set dt=dt+d, cr=cr+c
from AccState a, @accstm_p p
where p.bln=a.bln
and p.fond=a.fond
and p.acc=a.acc
and a.date=p.date
and p.date<>'20651031'

delete AccState -- удаление ненужных состояний
from AccState a, @accstm_p p
where p.bln=a.bln
and p.fond=a.fond
and p.acc=a.acc
and a.date=p.date
and p.date<>'20651031'
and cr=0 and dt=0
Понимаю что разбираться в таком количестве лень. Суть в том что данные последовательно обрабатываются и в конце используются для модификации рабочих таблиц. При чем используются не по одному разу.

Кое-какие запросы можно было бы объеденить через UNION. Но если объединять очень много - читабельность падает.

Наверняка нечто подобное(последовательная обработка) приходится делать и на Оракле. Как это обычно делается? Где хранятся промежуточные результаты?

Насчет глобальных таблиц - я их использую только в одном случае: допустим когда чего-то понасчитал в обычные временные таблицы, а потом надо это получить в Эксель. Проще всего это сделать через GTT.
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / О временных таблицах замолвите слово... / 25 сообщений из 177, страница 1 из 8
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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