Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Потом появились переменные типа table и необходимость даже в локальных врем таблицах еще больше снизилась Недавно создавал для обсуждения такой топик в соседнем форуме по MSSQL. Лично мои эксперименты показали, что почему-то переменные типа table работают оч-ч-чень медленно по сравнению с врем таблицами. Не знаю почему ! Многократно проверялось на 100000 узких записей. Про курсоры (MSSQL): буквально вчера писал, что при умном использовании они могут дать огромный выигрыш. Даже пробегая по тысячам строк. Чесно говоря даже не думал, что эффект может быть таким сильным. :) PS: безусловно и тем и другим не стоит увлекаться. Но если по уму, то можно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 17:55 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Alex.CzechИменно это. GTT не очень нравятся тем что при широком использовании этой фичи их будет очень много и они будут засорять взор при просмотре объектов БД Вопрос в том, что они не менее важны, чем другие объекты БД. А "как правильно организовать большую кучу объектов" - сложный, но более или менее решаемый вопрос. Например, можно разнести по схемам. В моем любимом PL/SQL Developer есть удобно настраиваемые фильтры - то есть, я могу, например, легко убрать эти таблицы из общего списка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:17 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
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 для коннекта к любой из баз - сомнительный подход (допустимый, только если "действительно хорошо работает везде"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:24 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
softwarer Alex.Czechб) PIPELINED глючит, причем иногда ужасно... я лично имел пример PIPELINED-функции, которая при попытке использования в довольно извращенном виде (SELECT (SELECT * FROM t1 INNER JOIN fn(..) where t1.fid = Насчет "ужасно" - полагаю, некоторый перебор. Я помню одну ошибку, упомянутую на металинке - скорее всего, Ваш случай; сложный запрос и pipelined, получающая входные параметры из полей запроса. Именно он и есть... и лично для меня когда от ошибки срубается коннекция и ее никак не обойти легким потряхиванием бубна - это ужасно :) Насчет ADO - теоретически я с вами согласен всеми руками. А практически когда весь огромный проект работает на ADO, взять и все переделать на некий "абстрактный гибкий провайдер" (да еще и такой, который будет работать лучше ADO, самого в некотором роде "абстрактного гибкого провайдера"), боюсь, нереально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:27 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Alex.CzechНасчет ADO - теоретически я с вами согласен всеми руками. А практически когда весь огромный проект работает на ADO, взять и все переделать на некий "абстрактный гибкий провайдер" (да еще и такой, который будет работать лучше ADO, самого в некотором роде "абстрактного гибкого провайдера"), боюсь, нереально Хм. У меня нет практического опыта такого - но мне представляется, что затраты на "заставить Оракл и MSSQL одинаково работать" и на "сделать промежуточный уровень" вполне сравнимы при заведомо лучшем результате второго. Скажем, говоря о селекте - если это проблема, я бы сделал объект "выбиральщик из функции", который делает EXEC для MSSQL и select from table() для Oracle (либо использует ref cursor, либо еще как-нибудь). Перевести проект на использование такого объекта - тривиальная техническая операция, даже если инструмент потребует выполнить прорву тупой работы; а вот искать какое-то "общее решение" - порождает принципиальные проблемы и принципиальную же кривизну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:38 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Alex.CzechИменно он и есть... и лично для меня когда от ошибки срубается коннекция и ее никак не обойти легким потряхиванием бубна - это ужасно :) Насколько я помню, для той ошибки есть патч. Впрочем - я согласен с тем, что от последних версий оракла хотелось бы большей устойчивости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:39 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
softwarer Alex.CzechНасчет ADO - теоретически я с вами согласен всеми руками. А практически когда весь огромный проект работает на ADO, взять и все переделать на некий "абстрактный гибкий провайдер" (да еще и такой, который будет работать лучше ADO, самого в некотором роде "абстрактного гибкого провайдера"), боюсь, нереально Хм. У меня нет практического опыта такого - но мне представляется, что затраты на "заставить Оракл и MSSQL одинаково работать" и на "сделать промежуточный уровень" вполне сравнимы при заведомо лучшем результате второго. Скажем, говоря о селекте - если это проблема, я бы сделал объект "выбиральщик из функции", который делает EXEC для MSSQL и select from table() для Oracle (либо использует ref cursor, либо еще как-нибудь). Перевести проект на использование такого объекта - тривиальная техническая операция, даже если инструмент потребует выполнить прорву тупой работы; а вот искать какое-то "общее решение" - порождает принципиальные проблемы и принципиальную же кривизну. Да так и сделано в том, что касается селекта, разумеется... особо и вариантов-то других нету :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:40 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Alex.CzechДа так и сделано в том, что касается селекта, разумеется... особо и вариантов-то других нету :) Так это и есть начало того самого "гибкого провайдера". Повторить N раз - и окажется, что приложение работает на уровне собственных объектов. Разумеется, проектировать эти объекты тоже стоит с применением головы :) Вообще, собственные объекты - большой плюс. В дельфе вполне можно было не спешить с такой практикой, но перейдя на джаву, я довольно быстро начал любому стандартному классу тут же делать свою тривиальную обертку. Затраты - копеечные, зато потом все вскрывшиеся недостатки элементарно дорабатываются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:46 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
softwarer Alex.CzechДа так и сделано в том, что касается селекта, разумеется... особо и вариантов-то других нету :) Так это и есть начало того самого "гибкого провайдера". Повторить N раз - и окажется, что приложение работает на уровне собственных объектов. Разумеется, проектировать эти объекты тоже стоит с применением головы :) Вообще, собственные объекты - большой плюс. В дельфе вполне можно было не спешить с такой практикой, но перейдя на джаву, я довольно быстро начал любому стандартному классу тут же делать свою тривиальную обертку. Затраты - копеечные, зато потом все вскрывшиеся недостатки элементарно дорабатываются. Это уже не начало... это уже апофеоз :) Гибкий провайдер был гибким и когда еще с одной СУБД только умел работать. Проблема в том что невозможно написать сферический гибкий провайдер в вакууме и под первую СУБД всегда слегка подзатачиваешься, к сожалению... я повторюсь, что я не ставил целью сказать что Оракл плохой ни в коем случае, просто обрисовал для каких нужд в MS SQL используют временные таблицы, и сказал, что в Оракле аналогичного механизма нет. Может, он и не нужен никому, кроме меня... в принципе, он и мне уже не особо нужен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:56 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
tygraНу та же временная (или и переменная таблица в MS SQL) таблица получается. Не совсем. Разница в том, что ее тип таки задается в правильном месте, а дальше употребляется локальный экземпляр этого типа. В MSSQL же, как я понимаю, используется что-то типа анонимных вложенных классов - на ходу определили и используем - но при этом этот объект еще и доступен снаружи (из других подпрограмм, с клиента) и этим пользуются. Имхо - это совершенно некорректно (хотя, конечно, можно и в такой системе придерживаться только корректных решений). Поэтому я изначально и сказал - то же самое по возможностям, но более корректная реализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:01 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
>> но при этом этот объект еще и доступен снаружи (из других подпрограмм, с клиента) и этим пользуются Недоступен локальный объект снаружи, чем и пользуются. :) Объект доступен только внутри, но не снаружи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:03 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Alex.Czechпросто обрисовал для каких нужд в MS SQL используют временные таблицы, и сказал, что в Оракле аналогичного механизма нет. Ээ.. Возможно, я не совсем понял, но мне показалось, что он таки есть - просто Вы испытываете некоторые проблемы с ADO (в котором, возможно, нет корректного решения для работы с оракловым механизмом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:04 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
К сожалению, насколько мне известно, ADO наиболее прямой метод доступа в отношении MSSQL, но он далеко не так прям по отношению к Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:08 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
www.fun4me.narod.ruНедоступен локальный объект снаружи, чем и пользуются. :) Объект доступен только внутри, но не снаружи. Мне казалось, что временные таблицы в MSSQL - объекты сессионного уровня видимости. Я ошибался? А как тогда решается вопрос с их явной или неявной передачей между подпрограммами? В Оракле такую "совсем локальную" таблицу можно было бы делать видимой внутри пакета, но в MSSQL вроде бы пакетов нет. Соответственно - вопрос решается или приходится искусственно стягивать код в одну подпрограмму? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:09 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Таблицы созданные в сессии доступны на уровне сессии и во всех процедурах, которые вызываемы из сессии (вряд ли очень уж кому нужно), но при этом могут быть переопределены в процедурых, вызываемых из сессии. Таблицы, созданные в процедурах доступны только для процедуры и для всех процедур, вызываемых из данной процедуры (редко используется) и уничтожаются по завершении процедуры. То есть, там стэк из таблиц получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:13 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
>>Таблицы .... Имелись ввиду временные #таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:14 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
www.fun4me.narod.ruТаблицы, созданные в процедурах доступны только для процедуры и для всех процедур, вызываемых из данной процедуры (редко используется) и уничтожаются по завершении процедуры. Понятно, спасибо. Не назову это решение хорошим, но остальные варианты еще хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:24 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Ну как же Вы можете об этом судить когда только что про это узнали? softwarer Самое простое - запихнуть эти промежуточные результаты в nested table. Это тип данных, относящийся к "коллекциям" Оракла. Их удобство в том, что с ними можно работать как select-ами, так и обычным программным синтаксисом - доступ по индексу, изменение данных, удаление строки итп. Можно чуть попобробней что такое nested table и как с ними можно работать? Хотелось бы примерчик какой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 10:00 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
авторПонятно, спасибо. Не назову это решение хорошим, но остальные варианты еще хуже. Тогда назовите отличия от Оракла - практически один в один получается. Только называется по-разному. Или заранее считается, что у MS все хуже? ;)) -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 11:12 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
действительно с временные таблицы в MSSQL и Sybase больше катят для хранения промежуточных выборок в процедурах. Но чтобы передавать выборки через временные таблицы тут нужно постараться. Компилить процедурку приходится таким образом - сначала создал временную табличку, потом откомпилил процедурку, грохнул табличку, создал вторую процедурку в которой создаешь врем. табличку и вызываешь первую процедурку. В принципе не сложно.. но все-же геморройно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 11:25 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
автордействительно с временные таблицы в MSSQL и Sybase больше катят для хранения промежуточных выборок в процедурах. Но чтобы передавать выборки через временные таблицы тут нужно постараться. Компилить процедурку приходится таким образом - сначала создал временную табличку, потом откомпилил процедурку, грохнул табличку, создал вторую процедурку в которой создаешь врем. табличку и вызываешь первую процедурку. В принципе не сложно.. но все-же геморройно. А теперь по-русски объясните, что вы там делаете, что компилите, как стараетесь .... При таком подходе естественно все будет геморройно . -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 11:31 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
tygra авторПонятно, спасибо. Не назову это решение хорошим, но остальные варианты еще хуже. Тогда назовите отличия от Оракла - практически один в один получается. Только называется по-разному. Или заранее считается, что у MS все хуже? ;)) -- Tygra's -- Отличия только в том, что у Оракла есть опции, определяющие, что делать с содержанием времянки на COMMIT - очищать ее или же сохранять записи. У ASA в 9-ке помимо этого еще ввели NOT TRANSACTIONAL, которое указывает, что времянке абсолютно почхать на транзакции и в не зависимости ROLLBACK/COMMIT записи в ней остаются в существующем состоянии. Это очень логично, особенно если учесть, что времянки в основном обьявляются в пределах какого то блока видимости, автоматом удаляются при выходе из этого блока и в основном не задействуются в транзакциях. Зато это дает существенный выигрыш в скорости работы DML с ними. Насколько я помню (хотя уже точно сказать не могу), у MSSQL времянки, обьявленные как DECLARE TABLE ведут себя фактически так же и поэтому обгоняют в скорости обычные времянки. Мне кажется тут гораздо интереснее сравнить не сколько функциональность времянок, а архитектуру их работы. У MSSQL времянки лежат в TempDB, которая фактически является полноценной БД. У ASA в понятии архитектуры база данных одна - то есть нет Master и TempDB - все пользователи, опции и права доступа находяться в самой БД, а промежуточная и временная информация храниться в временных файлах собственного формата в указанной для этих целей директории - собственный формат хранения (а не БД) такой информации кстати здорово увеличивает скорость работы с временными файлами, решает проблемы с блокировками при активном создании времянок множеством сессий и неполадками с TempDB, так как временные файлы ASA действительны только на время работы сервера и он к ним никак не привязывается. Интересно было бы послушать, как это организованно у Оракла и DB2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 11:39 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
tygra автордействительно с временные таблицы в MSSQL и Sybase больше катят для хранения промежуточных выборок в процедурах. Но чтобы передавать выборки через временные таблицы тут нужно постараться. Компилить процедурку приходится таким образом - сначала создал временную табличку, потом откомпилил процедурку, грохнул табличку, создал вторую процедурку в которой создаешь врем. табличку и вызываешь первую процедурку. В принципе не сложно.. но все-же геморройно. А теперь по-русски объясните, что вы там делаете, что компилите, как стараетесь .... При таком подходе естественно все будет геморройно . -- Tygra's -- Это судя по всему про Sybase ASE - там очень вумный компилятор не скомпилирует ХП, если в ней есть ссылки на несуществующие обьекты. Отсюда и такой большой бубен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 11:41 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
2 ASCRUSS NOT LOGGED INITIALLY в DB2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 11:41 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=32843104&tid=1553899]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 380ms |

| 0 / 0 |
