Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
SergSuper То, что вы предложили укладывается только в одну фразу None0 - "Сгружаю дерево иерархическим запросом" и делается в Oracle одним запросом, вообще без процедурного кода. А вот, как же там дальше None0 использует коллекции надеюсь он наконец подумает и объяснит. Я так понимаю задача у него была не сформировать дерево как таковое, а обработать потом как то полученные результаты, да и получить похоже не одно дерево, а несколько, вернее несколько веток. Чтобы получить каждую ветку можно или каждый раз запускать ваш алгоритм ( ну или в Oracle запускать иерархический запрос), для n веток n - запусков, или даже для m -веток m запусков :). Или сразу скачать большой кусок дерева в структуры, по которым потом можно проводить эффективную навигацию. Впрочем мне нехочется выдумывать за None0 чего он там хотел сделать. Gluk (Kazan) Вам стоит обновить свои знания по коллекциям, вы похоже опять путаетесь. В "forll, bulk collect" можно использовать как ассоциативные массивы, так и вложенные таблицы. Рзница между в ними скорее в способах инициализации и возможности использовать вложенные таблицы в SQL выражениях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 15:08 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
По себе могу сказать, что, работая с оракловыми pl/sql-таблицами, достаточно часто хочелось обрабатывать их при помощи операторов SQL, что к сожалению, невозможно. И вопрос "как сделать выборку из pl/sql-таблицами" один из распространеных по Oracle. Объектные таблицы уже предоставляют такую возможность, наряду со всеми остальными своими свойствами. Осталось совсем немного - научить объектные таблицы изменять свое содержимое через UPDATE, DELETE. Пока взамен этого можно "перебрасывать" значения массивов между двумя переменными, с требуемыми выборками. Конечно в T-SQL от MS мне много чего не нравится, но массивы там нахрен не нужны String Tokenizer? Я думаю, что обмен "массивами" между процедурами в MSSQL все-таки возможен, но не по ссылке, а по значению: процедура принимает resultset, заполняем им временную таблицу, производит требуемые операции и возвращает resultset как запрос из временной таблицы. Громоздко, но работать будет. 2tygra 4. Переменные - нет, временные - да, но не посредством переменной процедуры, а саму по себе. То есть временная таблица видна для всех процедур, вызываемых из создавшей эту самую временную таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 15:20 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
>>Я так понимаю задача у него была не сформировать дерево как таковое, а обработать потом как то полученные результаты, да и получить похоже не одно дерево, а несколько, вернее несколько веток. Чтобы получить каждую ветку можно или каждый раз запускать ваш алгоритм ( ну или в Oracle запускать иерархический запрос), для n веток n - запусков, или даже для m -веток m запусков :). Или сразу скачать большой кусок дерева в структуры, по которым потом можно проводить эффективную навигацию. Впрочем мне нехочется выдумывать за None0 чего он там хотел сделать. Глас народа - глас божий. Не зря же в народе ходит "Это даже ёжику ясно". Вы точно разобрались в проблеме. >>но массивы там нахрен не нужны. Я тоже так думал до некоторого времени. А таки понадобились. Поговорите на досуге с май-эскуэлистами, им тоже много чего не нужно: ни процедурных расширений, ни триггеров, ни транзакций. И ведь правы по своему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 15:20 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
авторТо есть временная таблица видна для всех процедур, вызываемых из создавшей эту самую временную таблицу? Угу -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 15:40 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 ежик Да пожалуй, ассоциативные таблицы с forall я не проверял, но возвращать их в качестве результата функции сто пудов нельзя. Впрчем, все это не относится к теме обсуждения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 15:56 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2Я и ёжик, None0 ёжикЧтобы получить каждую ветку можно или каждый раз запускать ваш алгоритм ( ну или в Oracle запускать иерархический запрос), для n веток n - запусков, или даже для m -веток m запусков :) В Оракле, может, и n или даже m запусков, а данный алгоритм позволяет за один запуск взять все ветки. К-во выполнений блока в цикле - максимальный уровень вложенности среди всех веток. Я об этом выше тоже писал. ёжикТо есть временная таблица видна для всех процедур, вызываемых из создавшей эту самую временную таблицу? Да. Если обычная временная таблица, не таблица-переменная. К сожалению, при этом подходе происходит перекомпиляция процедур :-( Если процедуры сложные, это замедляет работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 16:30 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Вторая цитата и ответ к Denis Popov ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 16:31 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
авторВ Оракле, может, и n или даже m запусков, а данный алгоритм позволяет за один запуск взять все ветки. К-во выполнений блока в цикле - максимальный уровень вложенности среди всех веток. Я об этом выше тоже писал. Ещё раз, вопрос не в том чтобы построить дерево, в Oracle ваш текст заменяется ОДНИМ select-ом, коллекции используются не для построения дерева, а для сохранения результатов этого построения в удобной для ДАЛЬНЕЙШЕЙ навигации форме. Результаты человеку потом еще надо интерпретировать, побегать по каким то веткам и подветкам и выполнить на этой основе еще какие то действия. "n или m запусков" относилось к варианту алгоритма когда каждая нужная ветвь достается по отдельности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 16:49 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 Я и ёжик Цитирую: [iЗадача: От каждого листа построить до корня путь в виде строки идентификаторов. Чегото типа того: '567,1223,4343,189'. Элементов в дереве порятка 500. Чего я делаю. Сгружаю дерево иерархическим запросом в коллекцию. И начинаю по ней активно шуровать циклами для постоения нужных путей. Что сделал я - сделал таблицу-переменную и записал туда путь(я кстати так и не увидел как это можно сделать на Оракле одним запросом, хотя примерно представляю как). Дальше можно как угодно работать с этой таблицей-переменной, в том числе использовать для ДАЛЬНЕЙШЕЙ навигации и совершенно не нужно n веток n запусков . ОБЪЯСНИТЕ МНЕ ЗАЧЕМ МНЕ НУЖНЫ ЭТИ КОЛЛЕКЦИИ! Как они могут мне помочь? Мне это действительно интересно, хотя бы чтоб синтаксис посмотреть. Или Вы что-то особенное подразумеваете под дальнейшей навигацией ? В ответ я вижу только ничем не аргументированные (и на мой взгляд спорные) фразы: ...Вариант работы с коллекцией по циклам в разы бастрее ...Каждый более менее развитый язык обязан иметь одномерные массивы ...Я тоже так( что массивы не нужны ) думал до некоторого времени. А таки понадобились. ...Поговорите на досуге с май-эскуэлистами Последнее особенно умиляет - от себя значит сказать нечего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 17:29 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
>>Что сделал я - сделал таблицу-переменную и записал туда путь(я кстати так и не увидел как это можно сделать на Оракле одним запросом, хотя примерно представляю как) А как это делается на MSSQL одним запросом? (Может моя проблема в том, что я ничего не знаю об аналитических функциях?). Сделайте мне один запрос на pure-MSSQL чтобы 5 строк этой таблицы: Код: plaintext 1. 2. 3. 4. 5. первратились в одну: '116,889,628,924,629,946' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 18:22 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
А при чём тут коллекции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 18:25 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
авторЦитирую: [iЗадача: От каждого листа построить до корня путь в виде строки идентификаторов. Чегото типа того: '567,1223,4343,189'. Элементов в дереве порятка 500. Чего я делаю. Сгружаю дерево иерархическим запросом в коллекцию. И начинаю по ней активно шуровать циклами для постоения нужных путей. Упссс.... действительно шуршать для построения нужных путей не надо, не вчитался в то, что человек написал, думал дело пишет.... автор(я кстати так и не увидел как это можно сделать на Оракле одним запросом, хотя примерно представляю как) SELECT id, level, SYS_CONNECT_BY_PATH(id, ',') "Path" FROM table START WITH parent = 0 CONNECT BY PRIOR id = parent; авторДальше можно как угодно работать с этой таблицей-переменной, в том числе использовать для ДАЛЬНЕЙШЕЙ навигации и совершенно не нужно n веток n запусков. Вы действительно считаете , что нет разницы между упорядоченными структурами данных в памяти и реляционными таблицами (пусть и временными)? Последние предназначены для работы с ними как со множествами и в этом виде и должны использоваться, навигация по ним очень мало эффективна, хранение в куче. Помочь колекции вам могут ускорив доступ к данным однажды уже выбранным, иногда это существенно. авторОБЪЯСНИТЕ МНЕ ЗАЧЕМ МНЕ НУЖНЫ ЭТИ КОЛЛЕКЦИИ! Как они могут мне помочь? Например для создания в памяти хэш-таблиц и работы с ними. Для кэширования нужной информации в рамках сессии, и опять же быстрого доступа по числовому ключу. (запрос из временной таблицы будет медленней) . Для приема данных из массивов Host-а (ну не по одному значению вам передает клиентская программа а сразу массив, из C++ например.) Если в общих словах то они могут помочь в построении эффективных структур данных для реализации эффективных алгоритмов. Обработка данных не всегда заканчивается их выборкой. Список литературы для желающих понять для чего нужны массивы, списки и.т.п: 1. Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман "Структуры данных и алгоритмы" 2. Д. Кнут "Искуство программирования" том кажется 1-й. 2-й и 3-й тоже не помешают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 18:49 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 None0 Я написал как это можно сделать на MS SQL Я нигде не писал что это можно сделать на MS SQL одним запросом (если не использовать Юкон) Да, на Оракле можно, но будет это не сильно короче ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 18:50 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Вы хотите данные на сервере построчно обрабатывать? И действительно считаете, что ваши циклы на PL/SQL будут эффективнее циклов, написанных разработчиком СУБД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 18:58 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
^ 2 ёжик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 18:58 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
>>SYS_CONNECT_BY_PATH Ежики, а это что??? Сервер 8.1.7, на всякий случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 19:00 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
www.fun4me.narod.ru А словосочетание "Переключение контекстов" вам чтото говорит? В данном случае между PL/SQL engine и SQL engine??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 19:03 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
В общем, без примера того, что автор вопроса делает с коллекциями и с их помощью нифига у нас не получится - на его пример можно было бы предоставить пример для MS SQL. А так только передиваем из пустого в порожнее -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 19:16 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Все эти эффективные алгоритмы, реализуемые с помощью эффективных наборов данных эффективны, тогда и только тогда, когда данных у вас с гулькин нос. А когда данных немного - тогда любой алгоритм эффективен. А если у вас запросы тормозят уже на 1500000 строк - то это проблеммы проектирования базы данных, запросов и организации индексов. Хорошо сделанная база на MSSQL будет работать всегда. И маштабируется проще. А хорошо выполненная оракловая база с использованием объектных заморочек и построчной обработки данных на PL/SQL будет работать до некторого предела (пока памяти хватит). И масштабироваться потом будет гораздо тяжелее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 19:18 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
А отсюда мораль - если Вам нужны какие-то свои супер-пупер навороченные эффективные алгоритмы обработки данных - их надо выносить на бизнес-сервер. А СУБД должна работать с наборами данных. И желательно, через хранимые процедуры. Вы даете её запрос - дай мне то-то и то-то. И она возвращает набор данных. Или делает изменения в наборе данных. И всё. И внутри хранимки тоже желательно использовать наборы данных, то есть писать её таким образом, чтобы количество обращений к SQL engine не зависило от размера обрабатываемого массива. Только когда количество взаимодействий между всеми компонентами системы не зависит от размерности данных, возможна эффективная работа с растущими объёмами данных, как мне кажется /imho/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 19:36 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
И что даёт использование таблиц T-SQL? Я всегда работаю с набором данных. Используя для этого запросы. Если работает медленно - я оптимизирую один конкретный запрос. Мне не надо менять структуру хранения информации, мне не надо перестраивать циклы. Я просто смотрю план выполнения запроса, перестраиваю индексы, смотрю загруженность сервера. И всё работает быстро. Это потому, что я сумел свой алгортим, который вначале казался эффективным и был записан на языке обработки отдельных записей перевести на язык обработки множеств. И всё это - благодаря T-SQL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! T-SQL Rulez!!!!!!!!!!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 19:43 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
>>реализуемые с помощью эффективных наборов данных эффективны, тогда и только тогда, когда данных у вас с гулькин нос. А говорят, что с миру по нитке, можно на рубашку собрать. Поэтому пишем эффективно всегда и везде. Если разработчик думает что в данном случае использование loop thorough collections эфективнее чем pure-sql используем коллекции не смотря на то, что большой бядька из Oracle или MS считает иначе. И потом. Об эффективных наборах данных. Есть ТЗ. Разрабатываются структуры данных под ДАННОЕ ТЗ. Все сделали. Сдали. Обмыли. Мир юн и зелен. А потом приходит заказчик и говорит - хочу сюда такую приблуду, сюда такую, а сюда такую рюшечку. У-у-у-пс. И ваша эффективна структура в свете этих рюшечек становится неэффективной. И че делать? Лопатить 50К строк кода? К чему бы это я? А просто, дефки из соседнего отдела уже наливают за 23 февраля. Удачи, мужики!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 20:25 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
А отсюда мораль - если Вам нужны какие-то свои супер-пупер навороченные эффективные алгоритмы обработки данных - их надо выносить на бизнес-сервер. зря вы имхо написали маленькими буквами, не видно ... 1. при суровых объемах и нагрузках MS рекомендует переносить логику в субд на T-SQL (как и Оракл) - см msdn, там же говорится что MS например участвуя в тестах tpc-с складывает в T-SQL ... 2. ущербность T-SQL MS признает в соседнем топике по Юконе, где рассказывает как круто будет CLI в субд ... 3. не понял что вы пытаетесь доказать - эти (оракловые) навороты в субд не нужны ? кому не нужны ? аналогию с mysql уловили ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 20:30 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Мне не нужны. Никому не нужны. Данные _не должны_ построчно обрабатываться. Вы вот напишите обработку данных коллекциями, сдадите заказчику, а через три-четыре года, когда всё тормозить будет - кто нормально всё будет переписывать? Опять я, что ли? А почему бы сразу по-человечески не писать? Я, понимаю, конечно, разделение труда, то-сё.... Кто-то криво пишет, кому то потом исправлять всё приходится, чтобы работало быстро. Я напишу большими буквами - БАЗА РАСТЁТ. И это надо учитывать, и не увлекаться коллекциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 20:43 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Перенос логики в СУБД, imho, это не значит взять паскалевскую программу и переписать её на PL/SQL. Наверное это означает и необходимость переписать алгоритмы обработки данных таким образом, чтобы они с множествами рабтали, а не со строками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 20:56 |
|
||
|
|

start [/forum/topic.php?fid=35&startmsg=32417063&tid=1554184]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 288ms |

| 0 / 0 |
