powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / О временных таблицах замолвите слово...
25 сообщений из 177, страница 3 из 8
О временных таблицах замолвите слово...
    #32842499
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потом появились переменные типа table и необходимость даже в локальных врем таблицах еще больше снизилась
Недавно создавал для обсуждения такой топик в соседнем форуме по MSSQL.
Лично мои эксперименты показали, что почему-то переменные типа table работают оч-ч-чень медленно по сравнению с врем таблицами. Не знаю почему !
Многократно проверялось на 100000 узких записей.

Про курсоры (MSSQL): буквально вчера писал, что при умном использовании они могут дать огромный выигрыш. Даже пробегая по тысячам строк. Чесно говоря даже не думал, что эффект может быть таким сильным. :)

PS: безусловно и тем и другим не стоит увлекаться. Но если по уму, то можно :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842547
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.CzechИменно это. GTT не очень нравятся тем что при широком использовании этой фичи их будет очень много и они будут засорять взор при просмотре объектов БД
Вопрос в том, что они не менее важны, чем другие объекты БД. А "как правильно организовать большую кучу объектов" - сложный, но более или менее решаемый вопрос. Например, можно разнести по схемам.

В моем любимом PL/SQL Developer есть удобно настраиваемые фильтры - то есть, я могу, например, легко убрать эти таблицы из общего списка.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842566
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.Czechскажу, что не знаю до сих пор как из ADO получить результат выполнения PL/SQL-функции, не говоря уж о том что ADO не поддерживает параметры типа NESTED TABLE
У меня есть впечатление, что к Ораклу не стоит лазить через ADO (и кроссплатформенность тут не при чем). Но вне зависимости от этого - я совершенно уверен, что это возможно.

Alex.Czechб) PIPELINED глючит, причем иногда ужасно... я лично имел пример PIPELINED-функции, которая при попытке использования в довольно извращенном виде (SELECT (SELECT * FROM t1 INNER JOIN fn(..) where t1.fid =
Насчет "ужасно" - полагаю, некоторый перебор. Я помню одну ошибку, упомянутую на металинке - скорее всего, Ваш случай; сложный запрос и pipelined, получающая входные параметры из полей запроса.

Alex.CzechОракл хороший, но кой-какие вещи и в нем делаются через жо, особенно когда надо поддержать кросс-плафторменность хотя бы в минимальном объеме (а нам тут надо)
Хм. Тут уже был топик насчет "не нужно знать конкретную СУБД". Суть моего мнения - кроссплатформенность нужно делать, используя гибкие провайдеры и преимущества каждой из платформ. Пытаться использовать "технологии, которые работают везде" - например, использовать то же ADO для коннекта к любой из баз - сомнительный подход (допустимый, только если "действительно хорошо работает везде").
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842571
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer Alex.Czechб) PIPELINED глючит, причем иногда ужасно... я лично имел пример PIPELINED-функции, которая при попытке использования в довольно извращенном виде (SELECT (SELECT * FROM t1 INNER JOIN fn(..) where t1.fid =
Насчет "ужасно" - полагаю, некоторый перебор. Я помню одну ошибку, упомянутую на металинке - скорее всего, Ваш случай; сложный запрос и pipelined, получающая входные параметры из полей запроса.


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

Насчет ADO - теоретически я с вами согласен всеми руками. А практически когда весь огромный проект работает на ADO, взять и все переделать на некий "абстрактный гибкий провайдер" (да еще и такой, который будет работать лучше ADO, самого в некотором роде "абстрактного гибкого провайдера"), боюсь, нереально
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842591
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.CzechНасчет ADO - теоретически я с вами согласен всеми руками. А практически когда весь огромный проект работает на ADO, взять и все переделать на некий "абстрактный гибкий провайдер" (да еще и такой, который будет работать лучше ADO, самого в некотором роде "абстрактного гибкого провайдера"), боюсь, нереально
Хм. У меня нет практического опыта такого - но мне представляется, что затраты на "заставить Оракл и MSSQL одинаково работать" и на "сделать промежуточный уровень" вполне сравнимы при заведомо лучшем результате второго.

Скажем, говоря о селекте - если это проблема, я бы сделал объект "выбиральщик из функции", который делает EXEC для MSSQL и select from table() для Oracle (либо использует ref cursor, либо еще как-нибудь). Перевести проект на использование такого объекта - тривиальная техническая операция, даже если инструмент потребует выполнить прорву тупой работы; а вот искать какое-то "общее решение" - порождает принципиальные проблемы и принципиальную же кривизну.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842596
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.CzechИменно он и есть... и лично для меня когда от ошибки срубается коннекция и ее никак не обойти легким потряхиванием бубна - это ужасно :)
Насколько я помню, для той ошибки есть патч. Впрочем - я согласен с тем, что от последних версий оракла хотелось бы большей устойчивости.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842597
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer Alex.CzechНасчет ADO - теоретически я с вами согласен всеми руками. А практически когда весь огромный проект работает на ADO, взять и все переделать на некий "абстрактный гибкий провайдер" (да еще и такой, который будет работать лучше ADO, самого в некотором роде "абстрактного гибкого провайдера"), боюсь, нереально
Хм. У меня нет практического опыта такого - но мне представляется, что затраты на "заставить Оракл и MSSQL одинаково работать" и на "сделать промежуточный уровень" вполне сравнимы при заведомо лучшем результате второго.

Скажем, говоря о селекте - если это проблема, я бы сделал объект "выбиральщик из функции", который делает EXEC для MSSQL и select from table() для Oracle (либо использует ref cursor, либо еще как-нибудь). Перевести проект на использование такого объекта - тривиальная техническая операция, даже если инструмент потребует выполнить прорву тупой работы; а вот искать какое-то "общее решение" - порождает принципиальные проблемы и принципиальную же кривизну.

Да так и сделано в том, что касается селекта, разумеется... особо и вариантов-то других нету :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842608
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.CzechДа так и сделано в том, что касается селекта, разумеется... особо и вариантов-то других нету :)
Так это и есть начало того самого "гибкого провайдера". Повторить N раз - и окажется, что приложение работает на уровне собственных объектов. Разумеется, проектировать эти объекты тоже стоит с применением головы :)

Вообще, собственные объекты - большой плюс. В дельфе вполне можно было не спешить с такой практикой, но перейдя на джаву, я довольно быстро начал любому стандартному классу тут же делать свою тривиальную обертку. Затраты - копеечные, зато потом все вскрывшиеся недостатки элементарно дорабатываются.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842627
Alex.Czech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer Alex.CzechДа так и сделано в том, что касается селекта, разумеется... особо и вариантов-то других нету :)
Так это и есть начало того самого "гибкого провайдера". Повторить N раз - и окажется, что приложение работает на уровне собственных объектов. Разумеется, проектировать эти объекты тоже стоит с применением головы :)

Вообще, собственные объекты - большой плюс. В дельфе вполне можно было не спешить с такой практикой, но перейдя на джаву, я довольно быстро начал любому стандартному классу тут же делать свою тривиальную обертку. Затраты - копеечные, зато потом все вскрывшиеся недостатки элементарно дорабатываются.

Это уже не начало... это уже апофеоз :) Гибкий провайдер был гибким и когда еще с одной СУБД только умел работать. Проблема в том что невозможно написать сферический гибкий провайдер в вакууме и под первую СУБД всегда слегка подзатачиваешься, к сожалению... я повторюсь, что я не ставил целью сказать что Оракл плохой ни в коем случае, просто обрисовал для каких нужд в MS SQL используют временные таблицы, и сказал, что в Оракле аналогичного механизма нет. Может, он и не нужен никому, кроме меня... в принципе, он и мне уже не особо нужен :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842635
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tygraНу та же временная (или и переменная таблица в MS SQL) таблица получается.
Не совсем. Разница в том, что ее тип таки задается в правильном месте, а дальше употребляется локальный экземпляр этого типа. В MSSQL же, как я понимаю, используется что-то типа анонимных вложенных классов - на ходу определили и используем - но при этом этот объект еще и доступен снаружи (из других подпрограмм, с клиента) и этим пользуются. Имхо - это совершенно некорректно (хотя, конечно, можно и в такой системе придерживаться только корректных решений).

Поэтому я изначально и сказал - то же самое по возможностям, но более корректная реализация.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842640
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> но при этом этот объект еще и доступен снаружи (из других подпрограмм, с клиента) и этим пользуются

Недоступен локальный объект снаружи, чем и пользуются. :) Объект доступен только внутри, но не снаружи.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842644
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex.Czechпросто обрисовал для каких нужд в MS SQL используют временные таблицы, и сказал, что в Оракле аналогичного механизма нет.
Ээ.. Возможно, я не совсем понял, но мне показалось, что он таки есть - просто Вы испытываете некоторые проблемы с ADO (в котором, возможно, нет корректного решения для работы с оракловым механизмом).
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842648
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, насколько мне известно, ADO наиболее прямой метод доступа в отношении MSSQL, но он далеко не так прям по отношению к Oracle
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842650
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
www.fun4me.narod.ruНедоступен локальный объект снаружи, чем и пользуются. :) Объект доступен только внутри, но не снаружи.
Мне казалось, что временные таблицы в MSSQL - объекты сессионного уровня видимости. Я ошибался?

А как тогда решается вопрос с их явной или неявной передачей между подпрограммами? В Оракле такую "совсем локальную" таблицу можно было бы делать видимой внутри пакета, но в MSSQL вроде бы пакетов нет. Соответственно - вопрос решается или приходится искусственно стягивать код в одну подпрограмму?
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842661
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблицы созданные в сессии доступны на уровне сессии и во всех процедурах, которые вызываемы из сессии (вряд ли очень уж кому нужно), но при этом могут быть переопределены в процедурых, вызываемых из сессии.

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

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

Имелись ввиду временные #таблицы.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32842675
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
www.fun4me.narod.ruТаблицы, созданные в процедурах доступны только для процедуры и для всех процедур, вызываемых из данной процедуры (редко используется) и уничтожаются по завершении процедуры.
Понятно, спасибо. Не назову это решение хорошим, но остальные варианты еще хуже.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32843104
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как же Вы можете об этом судить когда только что про это узнали?

softwarer Самое простое - запихнуть эти промежуточные результаты в nested table. Это тип данных, относящийся к "коллекциям" Оракла. Их удобство в том, что с ними можно работать как select-ами, так и обычным программным синтаксисом - доступ по индексу, изменение данных, удаление строки итп.
Можно чуть попобробней что такое nested table и как с ними можно работать? Хотелось бы примерчик какой
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32843295
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПонятно, спасибо. Не назову это решение хорошим, но остальные варианты еще хуже.
Тогда назовите отличия от Оракла - практически один в один получается. Только называется по-разному.
Или заранее считается, что у MS все хуже? ;))

-- Tygra's --
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32843345
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
действительно с временные таблицы в MSSQL и Sybase больше катят для хранения промежуточных выборок в процедурах. Но чтобы передавать выборки через временные таблицы тут нужно постараться. Компилить процедурку приходится таким образом - сначала создал временную табличку, потом откомпилил процедурку, грохнул табличку, создал вторую процедурку в которой создаешь врем. табличку и вызываешь первую процедурку. В принципе не сложно.. но все-же геморройно.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32843361
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автордействительно с временные таблицы в MSSQL и Sybase больше катят для хранения промежуточных выборок в процедурах. Но чтобы передавать выборки через временные таблицы тут нужно постараться. Компилить процедурку приходится таким образом - сначала создал временную табличку, потом откомпилил процедурку, грохнул табличку, создал вторую процедурку в которой создаешь врем. табличку и вызываешь первую процедурку. В принципе не сложно.. но все-же геморройно.
А теперь по-русски объясните, что вы там делаете, что компилите, как стараетесь ....
При таком подходе естественно все будет геморройно .

-- Tygra's --
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32843386
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tygra авторПонятно, спасибо. Не назову это решение хорошим, но остальные варианты еще хуже.
Тогда назовите отличия от Оракла - практически один в один получается. Только называется по-разному.
Или заранее считается, что у MS все хуже? ;))

-- Tygra's --
Отличия только в том, что у Оракла есть опции, определяющие, что делать с содержанием времянки на COMMIT - очищать ее или же сохранять записи. У ASA в 9-ке помимо этого еще ввели NOT TRANSACTIONAL, которое указывает, что времянке абсолютно почхать на транзакции и в не зависимости ROLLBACK/COMMIT записи в ней остаются в существующем состоянии. Это очень логично, особенно если учесть, что времянки в основном обьявляются в пределах какого то блока видимости, автоматом удаляются при выходе из этого блока и в основном не задействуются в транзакциях. Зато это дает существенный выигрыш в скорости работы DML с ними. Насколько я помню (хотя уже точно сказать не могу), у MSSQL времянки, обьявленные как DECLARE TABLE ведут себя фактически так же и поэтому обгоняют в скорости обычные времянки.

Мне кажется тут гораздо интереснее сравнить не сколько функциональность времянок, а архитектуру их работы. У MSSQL времянки лежат в TempDB, которая фактически является полноценной БД. У ASA в понятии архитектуры база данных одна - то есть нет Master и TempDB - все пользователи, опции и права доступа находяться в самой БД, а промежуточная и временная информация храниться в временных файлах собственного формата в указанной для этих целей директории - собственный формат хранения (а не БД) такой информации кстати здорово увеличивает скорость работы с временными файлами, решает проблемы с блокировками при активном создании времянок множеством сессий и неполадками с TempDB, так как временные файлы ASA действительны только на время работы сервера и он к ним никак не привязывается. Интересно было бы послушать, как это организованно у Оракла и DB2.
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32843389
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tygra автордействительно с временные таблицы в MSSQL и Sybase больше катят для хранения промежуточных выборок в процедурах. Но чтобы передавать выборки через временные таблицы тут нужно постараться. Компилить процедурку приходится таким образом - сначала создал временную табличку, потом откомпилил процедурку, грохнул табличку, создал вторую процедурку в которой создаешь врем. табличку и вызываешь первую процедурку. В принципе не сложно.. но все-же геморройно.
А теперь по-русски объясните, что вы там делаете, что компилите, как стараетесь ....
При таком подходе естественно все будет геморройно .

-- Tygra's --
Это судя по всему про Sybase ASE - там очень вумный компилятор не скомпилирует ХП, если в ней есть ссылки на несуществующие обьекты. Отсюда и такой большой бубен :)
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32843391
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUSS
NOT LOGGED INITIALLY в DB2
...
Рейтинг: 0 / 0
О временных таблицах замолвите слово...
    #32843397
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman2 ASCRUSS
NOT LOGGED INITIALLY в DB2
В общем судя по всему я так понимаю при желании мне перейти на IBM DB2 будет не очень долго :)
...
Рейтинг: 0 / 0
25 сообщений из 177, страница 3 из 8
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / О временных таблицах замолвите слово...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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