powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / О временных таблицах замолвите слово...
25 сообщений из 177, страница 2 из 8
О временных таблицах замолвите слово...
    #32842372
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.CzechВ MS SQL одно из наиболее частых применений временных таблиц - сказать
INSERT INTO #ttable
EXEC <какая-то-совсем-чужая-процедура-которую-нагибать-под-себя-страшно-или-невозможно>

Кстати, как такие проблемы решают в Оракл, я не совсем понимаю до сих пор. Юзать REF CURSOR ? Дык по нему потом пройтись придется с песнями и плясками курсором, чтобы заюзать в своем запросе в качестве элемента; или я неправ ?
Один из вариантов решения, предложенного в ASA:
Код: plaintext
1.
SELECT *
FROM StoredProcedure (@Param1, @Param2);
Если в теле процедуры только SELECT, то она воспринимается как представление и разворачивается в план запроса, если еще какой то код, то она выполняется, автоматом результат передается в внутреннюю рабочую таблицу и уже она далее фигурирует в плане запроса. Использование ХП в запросах было бы неполным, если бы в ASA еще не добавили LATERAL соединение:
Код: plaintext
1.
2.
SELECT *
FROM Table1 t
  LATERAL StoredProcedure (@Param1 = t.Field1, @Param2 = t.Field2);
Такое соединение позволяет для каждой записи Table1 вызвать процедуру с поддержкой передачи в виде параметров полей запроса. Оптимизация будет выглядеть так же - если в процедуре только SELECT, то он развернется в основной план запроса. Это же соединение можно использовать и для организации подзапросов:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT t1.Field1, g.Max_Field2
FROM Table1 t1,
  LATERAL (
    SELECT Max(Field2) AS Max_Field2
    FROM Table2 t2
    WHERE t2.Field1 = t1.Field1
  ) AS g;
Как видим, фактически LATERAL является аналогом Subquery, внутри которого можно обращаться к полям основной таблицы, который часто применяется в секциях SELECT и WHERE. Однако в отличие от Subquery соединение LATERAL реализовано в оптимизаторе собственным оптимизированным алгоритмом и работает гораздо быстрее из за того, что ASA его разворачивает в основной план запроса и соотвествующе более оптимально использует статистику и индексы при его выполнении. В основном такой способ соединения очень выгоден для разделения сложного запроса, где используются куча подзапросов, в которых множество очень обьемных таблиц и получается выгоднее на записи основного запроса через SingleRowGroup организовать аггрегации через LATERAL, чем уломать оптимизатор всю эту страшную кучу правильно соединить. При правильном использовании можно некоторые запросы ускорять в 10-ки раз, плюс это позволяет почаще отказываться от времянок и держаться в проекте главной линии ASA - никаких хинтов в запросах для СУБД с нулевым администрированием, только оптимизатор вправе решать в зависимости от содержания БД, чего и как лучше (хотя естественно это применимо только к СУБД класса Workgroup, а уж никак к хранилищам данных, где есть живой админ, который всегда лучше знает свою БД).
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842373
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.CzechВ MS SQL одно из наиболее частых применений временных таблиц - сказать
INSERT INTO #ttable
EXEC <какая-то-совсем-чужая-процедура-которую-нагибать-под-себя-страшно-или-невозможно>

Кстати, как такие проблемы решают в Оракл, я не совсем понимаю до сих пор. Юзать REF CURSOR ? Дык по нему потом пройтись придется с песнями и плясками курсором, чтобы заюзать в своем запросе в качестве элемента; или я неправ ?
Ээ.. Заюзать-то можно как угодно. В том числе и через REF CURSOR, если сильно охота.

Вопрос в том, что я не понимаю, когда именно случается это "наиболее частое применение". Если у администратора - для решения разовых задач, типа "получить данные - покрутить - покрутить - покрутить", то ораклоиды обычно пользуют

Код: plaintext
create table X as select ....

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

Ну а конфликта имен здесь не будет в силу такого понятия, как "схема".

Если же имеется в виду постоянное применение, в "релизном программном коде" - надо пользоваться стандартными средствами, теми же GTT. Локальные средства здесь - прямой источник ошибок.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842383
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUS Alex.CzechВ MS SQL одно из наиболее частых применений временных таблиц - сказать
INSERT INTO #ttable
EXEC <какая-то-совсем-чужая-процедура-которую-нагибать-под-себя-страшно-или-невозможно>

Кстати, как такие проблемы решают в Оракл, я не совсем понимаю до сих пор. Юзать REF CURSOR ? Дык по нему потом пройтись придется с песнями и плясками курсором, чтобы заюзать в своем запросе в качестве элемента; или я неправ ?
Один из вариантов решения, предложенного в ASA:
Код: plaintext
1.
SELECT *
FROM StoredProcedure (@Param1, @Param2);


ASCRUS, я сколько читаю то что вы пишете про Sybase ASA, столько вам завидую белой завистью... потрясающий набор возможностей, безо всякой иронии говорю. С удовольствием бы под него попрограммировал :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842384
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperНаверняка нечто подобное(последовательная обработка) приходится делать и на Оракле. Как это обычно делается? Где хранятся промежуточные результаты?
Хм. Мой триггер остатков в этом не нуждался - впрочем, тут надо сравнивать структуры.

Самое простое - запихнуть эти промежуточные результаты в nested table. Это тип данных, относящийся к "коллекциям" Оракла. Их удобство в том, что с ними можно работать как select-ами, так и обычным программным синтаксисом - доступ по индексу, изменение данных, удаление строки итп.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842388
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer[quot Alex.Czech]Если же имеется в виду постоянное применение, в "релизном программном коде" - надо пользоваться стандартными средствами, теми же GTT. Локальные средства здесь - прямой источник ошибок.

Именно это. GTT не очень нравятся тем что при широком использовании этой фичи их будет очень много и они будут засорять взор при просмотре объектов БД. Тем, что их надо переносить на промышленную БД при переносе ХП. Впрочем, так себе объяснения, я согласен :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842390
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle это тоже позволяет TABLE и PIPELINED. Кроме того всяческие игрища с bulk collect. Синтаксис конечно ужасный, но кто на это обращает внимание ?
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842394
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.CzechИменно это. GTT не очень нравятся тем что при широком использовании этой фичи их будет очень много и они будут засорять взор при просмотре объектов БД. Тем, что их надо переносить на промышленную БД при переносе ХП. Впрочем, так себе объяснения, я согласен :)

В Oracle GTT ОДНА на всех пользователей и на все сеансы, разделяются в ней данные. Так что ничего никому засорять не будет.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842401
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Так что ничего никому засорять не будет.

Будет.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842403
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper
Во первых насколько я понял в Оракле нет возможности на AFTER TRIGGER получить весь набор измененных данных, а для позаписных триггеров времянки не нужны.

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

В третьих не забывайте, что у Оракла INSERT и UPDATE можно обьединить оператором MERGE (за название не ручаюсь), нарастающие спокойно реализуются аггрегатными запросами с использованием специальных OLAP и Windows функций, ну и т.д., т.п. В принципе у меня в ASA то же самое все и после перехода на нее с MSSQL мой код заметно ужался в 10-ки раз, использование времянок стало явлением нечастым (а с каждым ежемесячным паком и ростом уровня оптимизатора я что то помниться давно в коде времянок не обьявлял), по курсорам вообще придеться лезть в BOL и вспоминать как они там правильно обьявляются ... в общем понятно, что от того, что я получил более высокую функциональность, у меня сократилось время на написание кода и танцы с бубнами (этих тьфу тьфу вообще не наблюдается, пока на баги не наткнешься и то в основном танцуешь, чтобы обозначить баг и выслать его разработчикам).
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842407
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)Oracle это тоже позволяет TABLE и PIPELINED. Кроме того всяческие игрища с bulk collect. Синтаксис конечно ужасный, но кто на это обращает внимание ?

Принципиально - позволяет. На практике
а) Это уже процедуры, а не функции. Для тех кто скажет "who cares ?" я скажу, что не знаю до сих пор как из ADO получить результат выполнения PL/SQL-функции, не говоря уж о том что ADO не поддерживает параметры типа NESTED TABLE
б) PIPELINED глючит, причем иногда ужасно... я лично имел пример PIPELINED-функции, которая при попытке использования в довольно извращенном виде (SELECT (SELECT * FROM t1 INNER JOIN fn(..) where t1.fid = t2.id) FROM t2) срубала коннекцию (ошибка TNS communication lost), после переписки того же на NESTED TABLE работает помедленнее, но зато ничего не срубает
в) еще что-то было, пока писал первые 2 пункта, забыл третий :)

При этом я хочу сказать, что не ставлю совершенно целью вывести утверждение "Оракл плохой". Оракл хороший, но кой-какие вещи и в нем делаются через жо, особенно когда надо поддержать кросс-плафторменность хотя бы в минимальном объеме (а нам тут надо)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842410
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пункт а следует читать "это уже НЕ процедуры, а функции" :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842414
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что есть в Вашем понимании кроссплатформенность ?
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842429
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)Что есть в Вашем понимании кроссплатформенность ?

Наше ПО работает и на MS SQL, и на Оракл. При этом 90% "системного" кода и 99% прикладного одинаковые
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842430
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, не ощущаю в Oracle ПРИНЦИПИАЛЬНОЙ разницы между процедурами и функциями. Функции удобнее тем, что при определенных условиях их можно использовать в select, у процедур свои мелкие преимущества.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842432
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerСамое простое - запихнуть эти промежуточные результаты в nested table . Это тип данных, относящийся к "коллекциям" Оракла. Их удобство в том, что с ними можно работать как select-ами, так и обычным программным синтаксисом - доступ по индексу, изменение данных, удаление строки итп.
Ну та же временная (или и переменная таблица в MS SQL) таблица получается.

Вообще получается, что говорить о временных таблицах в разрезе их определения, данного в начале - нехорошо. Надо бы говорить о них в разрезе применения. А по применению получается, что везде они есть в явном или неявном виде

-- Tygra's --
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842434
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)Честно говоря, не ощущаю в Oracle ПРИНЦИПИАЛЬНОЙ разницы между процедурами и функциями. Функции удобнее тем, что при определенных условиях их можно использовать в select, у процедур свои мелкие преимущества.

Я так подозреваю, что вы с ним не через ADO работаете :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842439
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.CzechASCRUS, я сколько читаю то что вы пишете про Sybase ASA, столько вам завидую белой завистью... потрясающий набор возможностей, безо всякой иронии говорю. С удовольствием бы под него попрограммировал :)
Я не буду точно утверждать, но по моему все что я пишу про ASA давно присутствует в IBM DB2 :) Такое чувство, что из за теплой дружбы iAnywhere и IBM (а как же иначе - ведь iAnywhere главный разработчик ПО под мобильные решения, четко ориентированные под связку с IBM продуктами) последняя разрешила движение WatcomSQL в свою сторону. Хотя вот недавно опрос проводился менеджерами ASA - в какую сторону совместимости впервую очередь нужно двигаться - MSSQL, Oracle или IBM DB2, большинство пользователей высказалось за Oracle, мотивируя это тем, что частенько ASA используется именно в связке с консолидированными хранилищами данных на Оракле. Хотя лично я не представляю, как это можно достигнуть большой совместимости между блокировочником и версионником - все равно способы написания кода будут существенно различаться, да и обычно на верхнем уровне и нижнем не требуется аналогичная функциональность - у каждого уровня свои задачи и своя реализация этих задач.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842440
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, ADO селект из функции забракует? И даже с Оракловым провайдером?
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842442
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.Czech Gluk (Kazan)Что есть в Вашем понимании кроссплатформенность ?

Наше ПО работает и на MS SQL, и на Оракл. При этом 90% "системного" кода и 99% прикладного одинаковые

А наше на Unix-е и Windows, но мы здесь не этим мереемся
Не верю я в Ваше понимание кроссплатформенности, тут я полностью солидарен с Кайтом. Хотя мне глубоко импонирует как DB2 может работать с гетерогенными БД. Насколько я понимаю, она подстраивается под особенности реализации других СУБД. Во всяком случае так я понял, прошу адептов сильно не пиннать.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842445
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
www.fun4me.narod.ruА что, ADO селект из функции забракует? И даже с Оракловым провайдером?

Гм. В принципе не забракует. Но тут уже пострадает та самая кросс-платформенность. Нужно еще учитывать, что первой была версия под MS SQL :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842449
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tygraВообще получается, что говорить о временных таблицах в разрезе их определения, данного в начале - нехорошо. Надо бы говорить о них в разрезе применения. А по применению получается, что везде они есть в явном или неявном виде


Это вопрос реализации. В Oracle больше возможностей для выбора и следовательно маневра при разработке.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842452
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan) Alex.Czech Gluk (Kazan)Что есть в Вашем понимании кроссплатформенность ?

Наше ПО работает и на MS SQL, и на Оракл. При этом 90% "системного" кода и 99% прикладного одинаковые

А наше на Unix-е и Windows, но мы здесь не этим мереемся
Не верю я в Ваше понимание кроссплатформенности, тут я полностью солидарен с Кайтом. Хотя мне глубоко импонирует как DB2 может работать с гетерогенными БД. Насколько я понимаю, она подстраивается под особенности реализации других СУБД. Во всяком случае так я понял, прошу адептов сильно не пиннать.

Это не мое понимание, это реальность данная нам в ощущениях. Если мы сегодня сделаем 2 проекта - один под MS SQL, другой под Оракл, оно наверняка заработает быстрее, но завтра мы все тут и подохнеми :) Хотя постепенно несомненно к этому дело идет
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842456
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторГм. В принципе не забракует. Но тут уже пострадает та самая кросс-платформенность. Нужно еще учитывать, что первой была версия под MS SQL :)

В принципе, преобразование вызова exec proc(...) в вызов select * from TABLE(proc(...)) - это достаточно простая операция. Можно автоматически сделать или IF поставить.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842467
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.Czech
Это не мое понимание, это реальность данная нам в ощущениях. Если мы сегодня сделаем 2 проекта - один под MS SQL, другой под Оракл, оно наверняка заработает быстрее, но завтра мы все тут и подохнеми :) Хотя постепенно несомненно к этому дело идет

Видите, Вы тоже согласны с Кайтом - должна быть прослойка инкапсулирующая платформенно-зависимые детали реализации :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842477
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan) Alex.Czech
Это не мое понимание, это реальность данная нам в ощущениях. Если мы сегодня сделаем 2 проекта - один под MS SQL, другой под Оракл, оно наверняка заработает быстрее, но завтра мы все тут и подохнеми :) Хотя постепенно несомненно к этому дело идет

Видите, Вы тоже согласны с Кайтом - должна быть прослойка инкапсулирующая платформенно-зависимые детали реализации :)

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


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