Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
/imho/, стоящее в конце поста и выглядещее как подпись, относится ко всему посту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 16:15 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
А очень просто: Например у вас есть достаточно тяжелый запрос из-за навороченного ORDER-а. Если вам далее необходимо работать с этой выборкой, то почему бы ее не кинуть в коллекцию. Законный вопрос: а почему тогда мне ее не кинуть во временную таблицу? Единственный мой ответ здесь - запись в темп-таблицу всегда сопровождается редо-логами, то есть дерганьем дисковой ситемы. А зачем нам нагружать ее лишный раз? Робота с колекциями же - работа с памятью (если ее достаточно конечно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 00:11 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 None0 В приведённом примере надо одназначно использовать временные таблицы(или таблицы-переменные). На мой взгляд. Сервер сам должен решать что ему делать в памяти, а что на диске ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 10:38 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
запись в темпорари таблицу не сопровождается записью логи и совершенно не обязательно дергатается диск. ЗЫ. наверника темпорари тоже можно закрепить в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 10:46 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Gt. в MS SQL любая запись в таблицу логируется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 11:02 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
сейчас посмотреть негде, но вроде SELECT INTO не логируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 11:21 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Времянки в MSSQL логируются. Табличные переменные имеют локальную область видимости, висят в памяти и в транзакциях и логах не участвуют. SELECT INTO лучше не баловаться, лучше использовать CREATE TABLE #TableName (...) и INSERT INTO #TableName. В FAQ по MSSQL по моему все на SQL.RU это есть, ну или на форуме MSSQL уж точно есть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 11:31 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
да я про оракл ... речь вроде про оракл и колекции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 12:09 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Ха, вот еще пример. Работаю с деревьями. Задача: От каждого листа построить до корня путь в виде строки идентификаторов. Чегото типа того: '567,1223,4343,189'. Элементов в дереве порятка 500. Чего я делаю. Сгружаю дерево иерархическим запросом в коллекцию. И начинаю по ней активно шуровать циклами для постоения нужных путей. Да, тоже самое можно сделать иерархическими запросами со START WITH, равного листу. И запросов таких должно быть столько, сколько листьев. Да и потом полюбому такие выборки надо анализировать. Вариант работы с коллекцией по циклам в разы бастрее, чем задалбливать базу запросами. Итог: мне, как разработчику в Оракле коллекции нужны и важны. МС-Скуэлистам - большой привет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:19 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2None0 авторИтог: мне, как разработчику в Оракле коллекции нужны и важны. МС-Скуэлистам - большой привет. К чему это сказано? Вроде все пришли к выводу, что в MSSQL полный аналог оракловских коллекций - таблицы-переменные или временные таблицы. авторХа, вот еще пример. Работаю с деревьями. Задача: ...... Ну я в MSSQL делаю так-же, используя таблицы-переменные, тем более, что в MSSQL нет иерархических запросов. А вообще, правильно создав модель данных, это можно делать одним запросом, что я в последнее время и предпочитаю. Кстати, если делать всё-таки как вы, через коллекции, то особенно шуровать циклами не нужно - все деревья по всем нодам подгребаются одним циклом с к-вом итераций, равном максимальному уровню вложенности из всех поддеревьев. авторЕдинственный мой ответ здесь - запись в темп-таблицу всегда сопровождается редо-логами, то есть дерганьем дисковой ситемы. А зачем нам нагружать ее лишный раз? Робота с колекциями же - работа с памятью (если ее достаточно конечно). Это было сказано про темп-таблицы в MSSQL? В MSSQL запись в темп-таблицу всегда сопровождается редо-логами, но не дерганьем дисковой системы, а запись в таблицы-переменные даже не сопровождается редо-логами. Я специалист в MSSQL, а не в Оракле, и поэтому не позволяю себе делать делать заявления типа "Оракл ацтой, патамушта там ничего нильзя сделать". Вот буду специалистом, тогда позволю :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 17:14 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
>>Вроде все пришли к выводу, что в MSSQL полный аналог оракловских коллекций - таблицы-переменные или временные таблицы. Тогда вопросы: 1) Можно заполнять таблицы-переменные одним SELECT-ом. 2) Их можно использовать в запросах как обычные таблицы базы для оператора SELECT. 3) Генерится ли ошибка, исключение (или что там на MSSQL), при доступе к несуществующим индексам таблицы-переменной. 4) Можно ли их передавать в/из хранимых процедур. Если все ответы положительны (или условно положительны), тогда да, аналогия очевидно полная. >>МС-Скуэлистам - большой привет. Эээ, кому либо передать привет уже является непреличным? >>Оракл ацтой, патамушта там ничего нильзя сделать А где я такое сказал о MSSQL??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 18:44 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
автор1) Можно заполнять таблицы-переменные одним SELECT-ом. 2) Их можно использовать в запросах как обычные таблицы базы для оператора SELECT. 3) Генерится ли ошибка, исключение (или что там на MSSQL), при доступе к несуществующим индексам таблицы-переменной. 4) Можно ли их передавать в/из хранимых процедур. 1. А как же? Любые таблицы можно так заполнять :) 2. Угу 3. У таблицы-переменной индексов нет, у временной - есть, генерится 4. Переменные - нет, временные - да, но не посредством переменной процедуры, а саму по себе. Так что ничем принципиально не отличаются. Тут другое - оракловский подход пакетов придется забывать :) -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 19:16 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2None0 Из всего списка не только п. 4. И вот это очень и очень плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 20:00 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2tygra я так понял в 3 пункте имеется ввиду обращение к элементу коллекции, которого реально нет. К примеру collect(15) и при этом в коллекции нет этого элемента. А ответ здесь будет таким - нет смысла, т.к.это все же таблица, а не коллекция :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 22:49 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Большой спасибо за обсуждение данного вопроса. В принципе и предполагалось перейти на временые таблицы, но исходя из того что они все таки создаются на винте, а скорость чтения из памяти по сравнению со скоростью жесткого накопителя... сами знаете. Конечно будет замедление. Значит динамических массивов с использованием в DML в MSSQL нет ? Хорошо что упомянули деревья. Будите смеяться но они тоже есть (правда всего одна структура, по сравнению с коллекциями, они сплошь и рядом). Правда через некоторое написание кода в ХП это тоже решается, жать что не так красиво, придется структуру в ручную строить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 06:53 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 None0 Сдается мне, что Вы путаете коллекции Oracle (т.е. таблицы PL/SQL о которых шла речь изначально) с объектными таблицами, появившимися позже и имеющими совершенно другую функциональность. Тем самым Вы вводите в заблуждение людей не знакомых с Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 07:43 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2Simple авторисходя из того что они все таки создаются на винте.... Значит динамических массивов с использованием в DML в MSSQL нет? Да почти в каждом посте обсуждали, сколько можно - ничего на винте не создаётся - только если нет памяти; скажем, создаю массив больше, чем вся память компа. Надеюсь, в Оракле при отсутствии памяти тоже используется винт, или просто всё падает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 10:17 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, сейчас перечитал, действительно сначала шла речь об объектных таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 10:22 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
None0 Чего я делаю. Сгружаю дерево иерархическим запросом в коллекцию. И начинаю по ней активно шуровать циклами для постоения нужных путей. Да, тоже самое можно сделать иерархическими запросами со START WITH, равного листу. И запросов таких должно быть столько, сколько листьев. Да и потом полюбому такие выборки надо анализировать. Вариант работы с коллекцией по циклам в разы бастрее, чем задалбливать базу запросами. Извиняюсь, но плакать хочется читая такое. Мне кажется работать с базой по одной записи - это кощунство. Задалбливать базу запросами ... А для чего база нужна то? Она по идее и должна лучше с запросами справляться чем с циклами. Может я чего не понимаю, но вот решение этой задачи на MS SQL: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. Может и коллекциями это будет лучше и проще - ну покажите мне как бы это было на Оракле, а то только ссылки и красивые слова Simple ...скорость чтения из памяти по сравнению со скоростью жесткого накопителя... сами знаете. Конечно будет замедление. Значит динамических массивов с использованием в DML в MSSQL нет ? А никто и не спорит что написанное на низком уровне дольше работает. Только писать намного дольше приходится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 11:12 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Описка: ...написанное на низком уровне быстрее работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 11:13 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
>>Gluk (Kazan) А по-моему и коллекция и объектная таблица и pl/sql nested-table - это все называние одного разными словами. А что такое "объектная таблица". И когда они появились (если в 9-ке, то увы, не силен). >>SergSuper Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. В моей структуре столбца caption нет. Его нужно получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 12:20 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 None0 Я сам по первоначалу путался: type T_TYPE is table of number index by binary_integer; таблица PL/SQL ака ассоциативная(разреженная) коллекция старого стиля. В 9i появилась возможность by varchar2. Элементы не обязаны идти по порядку, и ее нельзя использовать в forall, bulk collect и иже с ними, для другого она (например для обхода мутации триггеров). create or replace type T_TYPE as table of varchar2(10); / Объектная таблица, которую Вы имеете в виду, появилась в 8i если не путаю. Ее можно использовать для всяких выкрутасов типа update-ов в forall, bulk collect, функций таблиц и т.п. У Кайта во втором томе хорошо описано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 12:35 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan): >>type T_TYPE is table of number index by binary_integer; эту фигню я называю разреженной матрицей. А все остальное, что описано в PL/SQL User's Guide and Reference / Collections and Records называю коллекциями. >>У Кайта во втором томе хорошо описано. Да я вкурсе, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 12:47 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
А вообще все должно быть так: Каждый более менее развитый язык обязан иметь одномерные массивы. Каждый язык должен поддерживать не только простые типы данных (int, char, long), но и сложные, состоящие из комбинации простых. Естественно передача данных в/из функций (как прямо, так и по ссылке) само собой разумеющееся. Так вот коллекции - ни что иное как массивы сложных типов (простые типы - частность). А так как язык у нас - процедурное расширение SQL, то такие массивы можно представлять как обычные таблицы базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 13:14 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 None0 Если Вы чуть внимательнее посмотрите, то поймёте поле caption - это только название ветки, я его использовал для проверки правильности. А сам путь до корня вычисляется и записывается в поле path таблицы-переменной @t. Конечно в T-SQL от MS мне много чего не нравится, но массивы там нахрен не нужны. Дык и всё-таки: имею я надежду увидеть решение с коллекциями от Вас? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 14:46 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=32414802&tid=1554184]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 184ms |
| total: | 324ms |

| 0 / 0 |
