powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Работа с коллекциями в T-SQL
85 сообщений из 85, показаны все 4 страниц
Работа с коллекциями в T-SQL
    #32410583
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите.
Были написаны коды на PL/SQL. Их необходимо перевести на T-SQL (меняется БД). Есть ли аналог таблиц обьектов (table of object) (работы с коллекциями, в частности использование их в запросах) в T-SQL. Или придется переносить логику на клиента (С#)
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32410623
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не имеется.

А что вы подразумеваете под работы с коллекциями ? Зачем уж они так нужны? Может избавиться от них - все-равно придется бОльшую часть переписать

-- Tygra's --
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32410643
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переписать понятное дело. А вы работали с коллекциями ? Просто те возможности которые они дают можно решить только курсорами и то не всегда.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32410780
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не работал.
Поэтому и спрашиваю - что это есть за работа, чтобы предложить как это сделать на MS SQL (или не делать :)

-- Tygra's --
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32411115
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и чего такого они дают?
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32411210
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грубо говоря, это ассоциативные массивы (в 8-ке по integer, в 9-ке можно по varchar2) в памяти сеанса. Весьма удобны в работе и довольно широко используются в Oracle
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32411749
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Gluk (Kazan)
А чем они отличаются от временных таблиц в MSSQL?
Ассоциативный массив - это массив с обращениями не по индексу, а по значению ключа (как я понял из вашего описания). Вот в MSSQL это есть. И тоже очень широко используются.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32411789
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем - вам придется переписать код на использование временных таблиц...

Понятно что менее удобно - но такой уж TSQL - язык спартанцев и прочих...
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32411820
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 furnikov
А вы видели, sql trace при обработке коллекций или вложенных таблиц на клиенте через функции OCI? ORACLE по каждому чиху загружает кучу ненужной информации о типе объекта из своих системных таблиц. Причем делает это не одним запросом, а целой серией маленьких ненужных запросиков. Что существенно увеличивает нагрузку на сеть и тормозит работу приложения.
Если оно так же и на PL/SQL реализовано.... Тогда это должно тормозить уже на таблице с полумиллионом строк... /imho/
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32411839
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, временные таблицы гораздо удобнее - вы можете их использовать в запросах без открытия курсора. Естественно, всё быстрее работает. Так как оптимизатор может, например, распараллелить запрос, если сочтет нужным. А с коллекциями такого не сделать не удастся.
В общем, забудьте о коллекциях - используйте временные таблицы. Поймете, что много потеряли, программируя на ORACLE.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32411917
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну ну - коллекции на клиенте... ну тогда да для вас ORACLE - это вообще не СУБД (тем более в сравнении с MS SQL)
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32412039
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 funikovyuri
А можно какой-нибудь примерчик по применению коллекций? Хоть понять что это такое
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32412085
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, да, примерчик нам.
И как именно у вас применяются

-- Tygra's --
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32412713
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
поскольку оракловые источники посмотреть похоже вам религия не позволяет, предлагаю смотреть сюда:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/architec/8_ar_ad_0hyx.asp
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413046
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gt.
Без ёрничества конечно никак...
Ну не знаю я ничего об Оракле - не было нужно - и где я эти источники буду искать? Неужели трудно пример какой? Я б чего-нибудь написал, если б мог.

Приведённая Вами ссылка описывает English Query - скорее всего Вы ошиблись или тогда чё-то надо еще пояснить.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413084
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при чем тут оракловые источники? Хочется узнать, как это использует Simple - может оно ему не надо

-- Tygra's --
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413368
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
мда линк на msdn explorerом и не заполучить ...

http://msdn.microsoft.com/msdnmag/issues/04/02/UDTsinYukon/default.aspx
там рядом пара статей зачем в субд (Юконе) ООП

Без ёрничества конечно никак...

если бы вы хотели что-то узнать то уже посмотрели бы Oracle® Database Application Developer's Guide - Object-Relational Features ...
http://download-west.oracle.com/docs/cd/B12037_01/appdev.101/b10799/toc.htm
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413391
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Gt.
Вторая ссылка требует пароля... Вот у вас всё так... Это по MSSQL легко найти информацию.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413402
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
зарегистрируйся - это бесплатно, лень? чуть шевилим мозгами и ...
http://www.google.com/search?hl=en&ie=UTF-8&oe=UTF-8&q=Oracle%C2%AE+Database+Application+Developer%27s+Guide+-+Object-Relational+Features+
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413437
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и правильно. В принципе, каждый столбец в отношении должен быть атомарным. А UDT с перегрузкой операций позволяют хранить в базе только отношения между атомарными столбцами, скрывая детали реализации структуры столбцов в UDT. Это может быть полезным, так как всё равно в наше время в высшые нормальные формы из-за лени мало кто базу переведёт.
Но коллекции являются вариантом реализации именно отношений. Спрашивается, нафига тогда таблицы?

На самом деле, я видел реализации постраничной подгрузки с помощью коллекций. Работало всё неимоверно медленно. Запрос с двумя подзапросами с использованием ROWNUM работал на порядок быстрее. (Особенно для первых страниц :)) .Если в случае Simple коллекции используются для альтернативы таблицам (а их приходится так использовать из-за неэффективной реализации временных таблиц в ORACLE), то замена их на таблицы при переходе на MSSQL будет вполне естественной и лишь увеличит производительность системы.

/imho/
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413509
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Gt.
авторзарегистрируйся - это бесплатно, лень?
Ну, что-бы узнать, что такое коллекции, заводить новый почтовый ящик, вводить сто полей в формах регистрации....

За гуглёвую ссылку спасибо - про поиск я как-то и не подумал :-)
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413564
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под коллекциями Oracle обычно подразумеваются PL/SQL-таблицы, начиная с Oracle8i дополнительно появились объектные таблицы. Первые представляют собой не более чем индексированные массивы, с ними нельзя работать через операторы SQL: SELECT, INSERT, UPDATE, etc, но в запросах можно использовать элементы массива, указывая его индекс. Объектные же таблицы могут использоваться точно так же, но возможностей у них гораздо больше: использование в запросах, создание обыкновенных таблиц на их основе, доступ к методам объектов таблицы и т.д.

Главное отличие оракловых коллекций от временных таблиц ИМХО состоит в возможности передачи их в качестве аргумента процедуры (здесь я могу ошибаться, может это не так, т.е. в MSSQL можно "обмениваться" временными таблицами?) и хранении их экземпляров в контексте сессии. В MSSQL, насколько я знаю, отсутствует понятие пакета, или PACKAGE, где можно сохранять пользовательские переменные, к примеру, экземпляра массива. И если участки кода Oracle. использующие коллекции только "для внутреннего употребления", можно будет достаточно безболезненно переписать на использование временных таблиц, то код, использующий "разделяемые" коллекции, ИМХО придется переосмысливать полностью.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413590
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вобще личных впечатлений и личного опыта хотелось. Ссылками то кидаться проще простого.
Но видать не судьба.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413642
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ораклисты - они все такие. В большинстве своём. Жизнь по книжкам учат, а не по опыту. Ссылка для них важнее, чем пример.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413919
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
www.fun4me.narod.ru

А у сторонником MS SQL тогда есть черта - все чего нет в их любимой СУБД причислять к ненужному...

P.S> мы же вроде про атомарность договорились (т.е. где imho)
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32413946
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/imho/, стоящее в конце поста и выглядещее как подпись, относится ко всему посту.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32414516
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А очень просто:
Например у вас есть достаточно тяжелый запрос из-за навороченного ORDER-а. Если вам далее необходимо работать с этой выборкой, то почему бы ее не кинуть в коллекцию. Законный вопрос: а почему тогда мне ее не кинуть во временную таблицу? Единственный мой ответ здесь - запись в темп-таблицу всегда сопровождается редо-логами, то есть дерганьем дисковой ситемы. А зачем нам нагружать ее лишный раз? Робота с колекциями же - работа с памятью (если ее достаточно конечно).
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32414776
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 None0
В приведённом примере надо одназначно использовать временные таблицы(или таблицы-переменные). На мой взгляд.
Сервер сам должен решать что ему делать в памяти, а что на диске
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32414802
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
запись в темпорари таблицу не сопровождается записью логи и совершенно не обязательно дергатается диск.

ЗЫ. наверника темпорари тоже можно закрепить в памяти.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32414844
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gt.

в MS SQL любая запись в таблицу логируется...
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32414895
AlTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сейчас посмотреть негде, но вроде SELECT INTO не логируется.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32414907
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Времянки в MSSQL логируются. Табличные переменные имеют локальную область видимости, висят в памяти и в транзакциях и логах не участвуют. SELECT INTO лучше не баловаться, лучше использовать CREATE TABLE #TableName (...) и INSERT INTO #TableName. В FAQ по MSSQL по моему все на SQL.RU это есть, ну или на форуме MSSQL уж точно есть :)
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32415003
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
да я про оракл ... речь вроде про оракл и колекции
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32415738
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ха, вот еще пример.
Работаю с деревьями. Задача: От каждого листа построить до корня путь в виде строки идентификаторов. Чегото типа того: '567,1223,4343,189'. Элементов в дереве порятка 500.
Чего я делаю. Сгружаю дерево иерархическим запросом в коллекцию. И начинаю по ней активно шуровать циклами для постоения нужных путей. Да, тоже самое можно сделать иерархическими запросами со START WITH, равного листу. И запросов таких должно быть столько, сколько листьев. Да и потом полюбому такие выборки надо анализировать.
Вариант работы с коллекцией по циклам в разы бастрее, чем задалбливать базу запросами.
Итог: мне, как разработчику в Оракле коллекции нужны и важны. МС-Скуэлистам - большой привет.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32415894
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2None0
авторИтог: мне, как разработчику в Оракле коллекции нужны и важны. МС-Скуэлистам - большой привет.
К чему это сказано? Вроде все пришли к выводу, что в MSSQL полный аналог оракловских коллекций - таблицы-переменные или временные таблицы.

авторХа, вот еще пример. Работаю с деревьями. Задача: ......
Ну я в MSSQL делаю так-же, используя таблицы-переменные, тем более, что в MSSQL нет иерархических запросов. А вообще, правильно создав модель данных, это можно делать одним запросом, что я в последнее время и предпочитаю.

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

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

Это было сказано про темп-таблицы в MSSQL?
В MSSQL запись в темп-таблицу всегда сопровождается редо-логами, но не дерганьем дисковой системы, а запись в таблицы-переменные даже не сопровождается редо-логами.

Я специалист в MSSQL, а не в Оракле, и поэтому не позволяю себе делать делать заявления типа "Оракл ацтой, патамушта там ничего нильзя сделать". Вот буду специалистом, тогда позволю :-)
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416059
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Вроде все пришли к выводу, что в MSSQL полный аналог оракловских коллекций - таблицы-переменные или временные таблицы.

Тогда вопросы:
1) Можно заполнять таблицы-переменные одним SELECT-ом.
2) Их можно использовать в запросах как обычные таблицы базы для оператора SELECT.
3) Генерится ли ошибка, исключение (или что там на MSSQL), при доступе к несуществующим индексам таблицы-переменной.
4) Можно ли их передавать в/из хранимых процедур.

Если все ответы положительны (или условно положительны), тогда да, аналогия очевидно полная.

>>МС-Скуэлистам - большой привет.
Эээ, кому либо передать привет уже является непреличным?

>>Оракл ацтой, патамушта там ничего нильзя сделать
А где я такое сказал о MSSQL???
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416087
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор1) Можно заполнять таблицы-переменные одним SELECT-ом.
2) Их можно использовать в запросах как обычные таблицы базы для оператора SELECT.
3) Генерится ли ошибка, исключение (или что там на MSSQL), при доступе к несуществующим индексам таблицы-переменной.
4) Можно ли их передавать в/из хранимых процедур.

1. А как же? Любые таблицы можно так заполнять :)
2. Угу
3. У таблицы-переменной индексов нет, у временной - есть, генерится
4. Переменные - нет, временные - да, но не посредством переменной процедуры, а саму по себе.

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

-- Tygra's --
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416117
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2None0
Из всего списка не только п. 4. И вот это очень и очень плохо.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416191
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2tygra
я так понял в 3 пункте имеется ввиду обращение к элементу коллекции, которого реально нет. К примеру collect(15) и при этом в коллекции нет этого элемента. А ответ здесь будет таким - нет смысла, т.к.это все же таблица, а не коллекция :)
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416269
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой спасибо за обсуждение данного вопроса. В принципе и предполагалось перейти на временые таблицы, но исходя из того что они все таки создаются на винте, а скорость чтения из памяти по сравнению со скоростью жесткого накопителя... сами знаете. Конечно будет замедление. Значит динамических массивов с использованием в DML в MSSQL нет ?
Хорошо что упомянули деревья. Будите смеяться но они тоже есть (правда всего одна структура, по сравнению с коллекциями, они сплошь и рядом). Правда через некоторое написание кода в ХП это тоже решается, жать что не так красиво, придется структуру в ручную строить.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416283
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 None0

Сдается мне, что Вы путаете коллекции Oracle (т.е. таблицы PL/SQL о которых шла речь изначально) с объектными таблицами, появившимися позже и имеющими совершенно другую функциональность. Тем самым Вы вводите в заблуждение людей не знакомых с Oracle.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416450
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Simple
авторисходя из того что они все таки создаются на винте....
Значит динамических массивов с использованием в DML в MSSQL нет?
Да почти в каждом посте обсуждали, сколько можно - ничего на винте не создаётся - только если нет памяти; скажем, создаю массив больше, чем вся память компа. Надеюсь, в Оракле при отсутствии памяти тоже используется винт, или просто всё падает?
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416461
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, сейчас перечитал, действительно сначала шла речь об объектных таблицах.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416574
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
create table #t(id int, parent int, caption varchar( 20 ))
go

insert #t(id, parent, caption)
select  1 ,  0 , '1'
union
select  2 ,  0 , '2'
union
select  3 ,  1 , '1.3'
union
select  4 ,  1 , '1.4'
union
select  5 ,  2 , '1.5'
union
select  6 ,  3 , '1.3.6'
union
select  7 ,  6 , '1.3.6.7'
union
select  8 ,  4 , '1.4.8'
union
select  9 ,  3 , '1.3.9'
go

 --------- собственно решение ---------
 
declare @t table(id int, level int, caption varchar( 20 ), path varchar( 99 ))
declare @L int
set @L= 0 

insert @t
  select id,  0 , caption, convert(varchar, id)
    from #t where parent= 0 
while @@rowcount<> 0 
  begin
    set @L=@L+ 1 
    insert @t    -- запрос выполнится только 3 раза, а не 9!
 
      select t.id, @L, t.caption, v.path+'.'+convert(varchar, t.id)
        from @t v, #t t
        where v.id=t.parent and level=@L- 1 
  end

select * from @t


Может и коллекциями это будет лучше и проще - ну покажите мне как бы это было на Оракле, а то только ссылки и красивые слова


Simple ...скорость чтения из памяти по сравнению со скоростью жесткого накопителя... сами знаете. Конечно будет замедление. Значит динамических массивов с использованием в DML в MSSQL нет ?
А никто и не спорит что написанное на низком уровне дольше работает. Только писать намного дольше приходится.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416581
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Описка:
...написанное на низком уровне быстрее работает...
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416741
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>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.
insert #t(id, parent, caption)
select  1 ,  0 , '1'
union
select  2 ,  0 , '2'
union
select  3 ,  1 , '1.3'
union
select  4 ,  1 , '1.4'
union
select  5 ,  2 , '1.5'
union
select  6 ,  3 , '1.3.6'
union
select  7 ,  6 , '1.3.6.7'
union
select  8 ,  4 , '1.4.8'
union
select  9 ,  3 , '1.3.9'
go


В моей структуре столбца caption нет. Его нужно получить.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416770
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, функций таблиц и т.п. У Кайта во втором томе хорошо описано.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416787
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan):
>>type T_TYPE is table of number index by binary_integer;
эту фигню я называю разреженной матрицей.

А все остальное, что описано в PL/SQL User's Guide and Reference / Collections and Records называю коллекциями.

>>У Кайта во втором томе хорошо описано.
Да я вкурсе, спасибо.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32416842
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще все должно быть так:
Каждый более менее развитый язык обязан иметь одномерные массивы. Каждый язык должен поддерживать не только простые типы данных (int, char, long), но и сложные, состоящие из комбинации простых. Естественно передача данных в/из функций (как прямо, так и по ссылке) само собой разумеющееся.

Так вот коллекции - ни что иное как массивы сложных типов (простые типы - частность). А так как язык у нас - процедурное расширение SQL, то такие массивы можно представлять как обычные таблицы базы.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417030
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 None0
Если Вы чуть внимательнее посмотрите, то поймёте поле caption - это только название ветки, я его использовал для проверки правильности. А сам путь до корня вычисляется и записывается в поле path таблицы-переменной @t.

Конечно в T-SQL от MS мне много чего не нравится, но массивы там нахрен не нужны.

Дык и всё-таки: имею я надежду увидеть решение с коллекциями от Вас?
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417063
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper

То, что вы предложили укладывается только в одну фразу None0 - "Сгружаю дерево иерархическим запросом" и делается в Oracle одним запросом, вообще без процедурного кода. А вот, как же там дальше None0 использует коллекции надеюсь он наконец подумает и объяснит.

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

Gluk (Kazan)
Вам стоит обновить свои знания по коллекциям, вы похоже опять путаетесь.
В "forll, bulk collect" можно использовать как ассоциативные массивы, так и вложенные таблицы. Рзница между в ними скорее в способах инициализации и
возможности использовать вложенные таблицы в SQL выражениях.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417099
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По себе могу сказать, что, работая с оракловыми pl/sql-таблицами, достаточно часто хочелось обрабатывать их при помощи операторов SQL, что к сожалению, невозможно. И вопрос "как сделать выборку из pl/sql-таблицами" один из распространеных по Oracle. Объектные таблицы уже предоставляют такую возможность, наряду со всеми остальными своими свойствами. Осталось совсем немного - научить объектные таблицы изменять свое содержимое через UPDATE, DELETE. Пока взамен этого можно "перебрасывать" значения массивов между двумя переменными, с требуемыми выборками.

Конечно в T-SQL от MS мне много чего не нравится, но массивы там нахрен не нужны

String Tokenizer? Я думаю, что обмен "массивами" между процедурами в MSSQL все-таки возможен, но не по ссылке, а по значению: процедура принимает resultset, заполняем им временную таблицу, производит требуемые операции и возвращает resultset как запрос из временной таблицы. Громоздко, но работать будет.

2tygra
4. Переменные - нет, временные - да, но не посредством переменной процедуры, а саму по себе.

То есть временная таблица видна для всех процедур, вызываемых из создавшей эту самую временную таблицу?
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417102
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Я так понимаю задача у него была не сформировать дерево как таковое, а обработать потом как то полученные результаты, да и получить похоже не одно дерево, а несколько, вернее несколько веток. Чтобы получить каждую ветку можно или каждый раз запускать ваш алгоритм ( ну или в Oracle запускать иерархический запрос), для n веток n - запусков, или даже для m -веток m запусков :). Или сразу скачать большой кусок дерева в структуры, по которым потом можно проводить эффективную навигацию. Впрочем мне нехочется выдумывать за None0 чего он там хотел сделать.

Глас народа - глас божий. Не зря же в народе ходит "Это даже ёжику ясно". Вы точно разобрались в проблеме.

>>но массивы там нахрен не нужны.
Я тоже так думал до некоторого времени. А таки понадобились.

Поговорите на досуге с май-эскуэлистами, им тоже много чего не нужно: ни процедурных расширений, ни триггеров, ни транзакций. И ведь правы по своему.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417146
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТо есть временная таблица видна для всех процедур, вызываемых из создавшей эту самую временную таблицу?

Угу

-- Tygra's --
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417173
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ежик

Да пожалуй, ассоциативные таблицы с forall я не проверял, но возвращать их в качестве результата функции сто пудов нельзя. Впрчем, все это не относится к теме обсуждения.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417238
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Я и ёжик, None0
ёжикЧтобы получить каждую ветку можно или каждый раз запускать ваш алгоритм ( ну или в Oracle запускать иерархический запрос), для n веток n - запусков, или даже для m -веток m запусков :)

В Оракле, может, и n или даже m запусков, а данный алгоритм позволяет за один запуск взять все ветки. К-во выполнений блока в цикле - максимальный уровень вложенности среди всех веток. Я об этом выше тоже писал.

ёжикТо есть временная таблица видна для всех процедур, вызываемых из создавшей эту самую временную таблицу?
Да. Если обычная временная таблица, не таблица-переменная. К сожалению, при этом подходе происходит перекомпиляция процедур :-( Если процедуры сложные, это замедляет работу.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417241
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вторая цитата и ответ к Denis Popov
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417271
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ Оракле, может, и n или даже m запусков, а данный алгоритм позволяет за один запуск взять все ветки. К-во выполнений блока в цикле - максимальный уровень вложенности среди всех веток. Я об этом выше тоже писал.
Ещё раз, вопрос не в том чтобы построить дерево, в Oracle ваш текст заменяется ОДНИМ select-ом, коллекции используются не для построения дерева, а для сохранения результатов этого построения в удобной для ДАЛЬНЕЙШЕЙ навигации форме. Результаты человеку потом еще надо интерпретировать, побегать по каким то веткам и подветкам и выполнить на этой основе еще какие то действия.
"n или m запусков" относилось к варианту алгоритма когда каждая нужная ветвь достается по отдельности.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417337
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Я и ёжик
Цитирую:
[iЗадача: От каждого листа построить до корня путь в виде строки идентификаторов. Чегото типа того: '567,1223,4343,189'. Элементов в дереве порятка 500.
Чего я делаю. Сгружаю дерево иерархическим запросом в коллекцию. И начинаю по ней активно шуровать циклами для постоения нужных путей.
Что сделал я - сделал таблицу-переменную и записал туда путь(я кстати так и не увидел как это можно сделать на Оракле одним запросом, хотя примерно представляю как). Дальше можно как угодно работать с этой таблицей-переменной, в том числе использовать для ДАЛЬНЕЙШЕЙ навигации и совершенно не нужно n веток n запусков .
ОБЪЯСНИТЕ МНЕ ЗАЧЕМ МНЕ НУЖНЫ ЭТИ КОЛЛЕКЦИИ! Как они могут мне помочь? Мне это действительно интересно, хотя бы чтоб синтаксис посмотреть.
Или Вы что-то особенное подразумеваете под дальнейшей навигацией ?
В ответ я вижу только ничем не аргументированные (и на мой взгляд спорные) фразы:
...Вариант работы с коллекцией по циклам в разы бастрее
...Каждый более менее развитый язык обязан иметь одномерные массивы
...Я тоже так( что массивы не нужны ) думал до некоторого времени. А таки понадобились.
...Поговорите на досуге с май-эскуэлистами

Последнее особенно умиляет - от себя значит сказать нечего
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417417
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Что сделал я - сделал таблицу-переменную и записал туда путь(я кстати так и не увидел как это можно сделать на Оракле одним запросом, хотя примерно представляю как)

А как это делается на MSSQL одним запросом? (Может моя проблема в том, что я ничего не знаю об аналитических функциях?).

Сделайте мне один запрос на pure-MSSQL чтобы 5 строк этой таблицы:
Код: plaintext
1.
2.
3.
4.
5.
ParentID ChildID
 116        889 
 889        628 
 628        924 
 924        629 
 629        946 


первратились в одну: '116,889,628,924,629,946'
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417420
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при чём тут коллекции?
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417445
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЦитирую:
[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-й тоже не помешают.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417447
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 None0
Я написал как это можно сделать на MS SQL
Я нигде не писал что это можно сделать на MS SQL одним запросом (если не использовать Юкон)
Да, на Оракле можно, но будет это не сильно короче
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417459
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хотите данные на сервере построчно обрабатывать? И действительно считаете, что ваши циклы на PL/SQL будут эффективнее циклов, написанных разработчиком СУБД?
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417460
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
^
2 ёжик.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417463
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>SYS_CONNECT_BY_PATH
Ежики, а это что???

Сервер 8.1.7, на всякий случай.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417466
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
www.fun4me.narod.ru
А словосочетание "Переключение контекстов" вам чтото говорит? В данном случае между PL/SQL engine и SQL engine???
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417475
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, без примера того, что автор вопроса делает с коллекциями и с их помощью нифига у нас не получится - на его пример можно было бы предоставить пример для MS SQL. А так только передиваем из пустого в порожнее

-- Tygra's --
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417478
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все эти эффективные алгоритмы, реализуемые с помощью эффективных наборов данных эффективны, тогда и только тогда, когда данных у вас с гулькин нос. А когда данных немного - тогда любой алгоритм эффективен. А если у вас запросы тормозят уже на 1500000 строк - то это проблеммы проектирования базы данных, запросов и организации индексов.

Хорошо сделанная база на MSSQL будет работать всегда. И маштабируется проще. А хорошо выполненная оракловая база с использованием объектных заморочек и построчной обработки данных на PL/SQL будет работать до некторого предела (пока памяти хватит). И масштабироваться потом будет гораздо тяжелее.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417488
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А отсюда мораль - если Вам нужны какие-то свои супер-пупер навороченные эффективные алгоритмы обработки данных - их надо выносить на бизнес-сервер. А СУБД должна работать с наборами данных. И желательно, через хранимые процедуры. Вы даете её запрос - дай мне то-то и то-то. И она возвращает набор данных. Или делает изменения в наборе данных. И всё. И внутри хранимки тоже желательно использовать наборы данных, то есть писать её таким образом, чтобы количество обращений к SQL engine не зависило от размера обрабатываемого массива.
Только когда количество взаимодействий между всеми компонентами системы не зависит от размерности данных, возможна эффективная работа с растущими объёмами данных, как мне кажется /imho/.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417491
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что даёт использование таблиц T-SQL?
Я всегда работаю с набором данных. Используя для этого запросы. Если работает медленно - я оптимизирую один конкретный запрос. Мне не надо менять структуру хранения информации, мне не надо перестраивать циклы. Я просто смотрю план выполнения запроса, перестраиваю индексы, смотрю загруженность сервера. И всё работает быстро. Это потому, что я сумел свой алгортим, который вначале казался эффективным и был записан на языке обработки отдельных записей перевести на язык обработки множеств.
И всё это - благодаря T-SQL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
T-SQL Rulez!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417507
None0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>реализуемые с помощью эффективных наборов данных эффективны, тогда и только тогда, когда данных у вас с гулькин нос.

А говорят, что с миру по нитке, можно на рубашку собрать. Поэтому пишем эффективно всегда и везде. Если разработчик думает что в данном случае использование loop thorough collections эфективнее чем pure-sql используем коллекции не смотря на то, что большой бядька из Oracle или MS считает иначе.
И потом. Об эффективных наборах данных. Есть ТЗ. Разрабатываются структуры данных под ДАННОЕ ТЗ. Все сделали. Сдали. Обмыли. Мир юн и зелен. А потом приходит заказчик и говорит - хочу сюда такую приблуду, сюда такую, а сюда такую рюшечку. У-у-у-пс. И ваша эффективна структура в свете этих рюшечек становится неэффективной. И че делать? Лопатить 50К строк кода?
К чему бы это я? А просто, дефки из соседнего отдела уже наливают за 23 февраля. Удачи, мужики!!!
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417512
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
А отсюда мораль - если Вам нужны какие-то свои супер-пупер навороченные эффективные алгоритмы обработки данных - их надо выносить на бизнес-сервер.

зря вы имхо написали маленькими буквами, не видно ...

1. при суровых объемах и нагрузках MS рекомендует переносить логику в субд на T-SQL (как и Оракл) - см msdn, там же говорится что MS например участвуя в тестах tpc-с складывает в T-SQL ...
2. ущербность T-SQL MS признает в соседнем топике по Юконе, где рассказывает как круто будет CLI в субд ...
3. не понял что вы пытаетесь доказать - эти (оракловые) навороты в субд не нужны ? кому не нужны ? аналогию с mysql уловили ?
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417518
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне не нужны. Никому не нужны. Данные _не должны_ построчно обрабатываться. Вы вот напишите обработку данных коллекциями, сдадите заказчику, а через три-четыре года, когда всё тормозить будет - кто нормально всё будет переписывать? Опять я, что ли? А почему бы сразу по-человечески не писать? Я, понимаю, конечно, разделение труда, то-сё.... Кто-то криво пишет, кому то потом исправлять всё приходится, чтобы работало быстро. Я напишу большими буквами - БАЗА РАСТЁТ. И это надо учитывать, и не увлекаться коллекциями.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417529
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перенос логики в СУБД, imho, это не значит взять паскалевскую программу и переписать её на PL/SQL. Наверное это означает и необходимость переписать алгоритмы обработки данных таким образом, чтобы они с множествами рабтали, а не со строками.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417531
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
И это надо учитывать, и не увлекаться коллекциями.

2Fun давайте вы сначало msdn по диогонали почитаете, а потом неясные моменты мы и обсудим. например какое место MS отводит xml, как хранится/обрабатыватся, зачем тип XMLtype и т.п.
может тогда чуть происнится чем не следует увлекатся и чье мнение нада учитывать :)
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417532
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё бы неплохо почитать, как XMLType в ORACLE реализован.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417533
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что пишет, например Шона Дилона (Sean Dillon):
Sean Dillon
Если вы храните свои данные в формате естественного XML, это не означает, что вы не можете использовать реляционный доступ. В СУБД Oracle9i вы можете создать представления ваших XML-данных, которые с помощью выражений языка XPath, конвейерных функций и индексов на базе функций (function-based indexes) обеспечат высокоскоростной реляционный доступ к вашим XML-данным. Это работает и может работать очень быстро, но имеет существенные накладные расходы, которые могут выйти за пределы допустимого, если вы для работы с данными всегда используете реляционный доступ. Единственная причина, по которой я могу оправдать хранение ваших данных только в формате естественного XML, – большую часть времени вы занимаетесь публикацией данных в виде XML-документов. Если же вам требуется реляционный доступ к данным время от времени, такой подход с хранением данных в формате естественного XML будет работать. Если большую часть времени вы занимаетесь доступом к данным с помощью реляционных запросов… Что же, читайте свои данные.

====================
Хорошая постановка задачи! Либо у вы практически не используете реляционного доступа, либо не можете гарантировать, что накладные расходы в вашей системе не выйдут за пределы допустимого. Это хорошо бы при сдаче продукта говорить, чтобы честнее быть.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417534
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, кстати, у меня был код, который не переносился в 9.2 из 9i из-за того, что в новой версии поменялся XMLType.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417536
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще для работы с XML/XSL документами используются специальные системы управления контентом. Хоть одну в пример приведите, в которых используется XMLType.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417544
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
слушай ладно я пропащий а ты то чего в пятницу вечером разашелся ? водку давно в такое время кушать :)

про мужика дай урл, такого не знаем, надеюсь у него сайт не в домене народ.ру

вот кусок из оракла мануала, наверника нечто подобное у MS в мануале Юкона ... на msdn к стате есть статья про объекты в таблицах Юкона.

Introduction to Oracle Objects
Advantages of Objects
In general, the object-type model is similar to the class mechanism found in C++ and Java. Like classes, objects make it easier to model complex, real-world business entities and logic, and the reusability of objects makes it possible to develop database applications faster and more efficiently. By natively supporting object types in the database, Oracle enables application developers to directly access the data structures used by their applications. No mapping layer is required between client-side objects and the relational database columns and tables that contain the data. Object abstraction and the encapsulation of object behaviors also make applications easier to understand and maintain.

Below are listed several other specific advantages that objects offer over a purely relational approach.


Objects Can Encapsulate Operations Along with Data

Database tables contain only data. Objects can include the ability to perform operations that are likely to be needed on that data. Thus a purchase order object might include a method to sum the cost of all the items purchased. Or a customer object might have methods to return the customer's buying history and payment pattern. An application can simply call the methods to retrieve the information.


Objects Are Efficient

Using object types makes for greater efficiency:

Object types and their methods are stored with the data in the database, so they are available for any application to use. Developers can benefit from work that is already done and do not need to re-create similar structures in every application.

You can fetch and manipulate a set of related objects as a single unit. A single request to fetch an object from the server can retrieve other objects that are connected to it. For example, when you select a customer object and get the customer's name, phone, and the multiple parts of his address in a single round-trip between the client and the server. When you reference a column of a SQL object type, you retrieve the whole object.


Objects Can Represent Part-Whole Relationships

In a relational system, it is awkward to represent complex part-whole relationships. A piston and an engine have the same status in a table for stock items. To represent pistons as parts of engines, you must create complicated schemas of multiple tables with primary key-foreign key relationships. Object types, on the other hand, give you a rich vocabulary for describing part-whole relationships. An object can have other objects as attributes, and the attribute objects can have their own object attributes too. An entire parts-list hierarchy can be built up in this way from interlocking object types.

Key Features of the Object-Relational Model
Oracle implements the object-type system as an extension of the relational model. The object-type interface continues to support standard relational database functionality such as queries (SELECT…FROM…WHERE), fast commits, backup and recovery, scalable connectivity, row-level locking, read consistency, partitioned tables, parallel queries, cluster database, export and import, and loader. Plus SQL and various programmatic interfaces to Oracle; including PL/SQL, Java, Oracle Call Interface, Pro*C/C++, and OO4O; have been enhanced with new extensions to support objects. The result is an object-relational model, which offers the intuitiveness and economy of an object interface while preserving the high concurrency and throughput of a relational database.

Key Features of the Object-Relational Model
Oracle implements the object-type system as an extension of the relational model. The object-type interface continues to support standard relational database functionality such as queries (SELECT…FROM…WHERE), fast commits, backup and recovery, scalable connectivity, row-level locking, read consistency, partitioned tables, parallel queries, cluster database, export and import, and loader. Plus SQL and various programmatic interfaces to Oracle; including PL/SQL, Java, Oracle Call Interface, Pro*C/C++, and OO4O; have been enhanced with new extensions to support objects. The result is an object-relational model, which offers the intuitiveness and economy of an object interface while preserving the high concurrency and throughput of a relational database.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417550
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Шон Дилан: http://www.amazon.com/exec/obidos/search-handle-url/index%3Dbooks%26field-author%3DSean%20Dillon%26tag%3Dleonardodicap052/104-7139507-6631952

2. Моя цитата взята отсюда:
http://www.sibinfo.ru/news/03_08_19/oracle_admin.shtml

Меня угостили уже... Ещё часа в три... Хотел баг пофиксит..... Но видно выпил лишнего. Не знаю, как домой доехать. Вот и несу всякую чушь на форумах... Придётся во вторник. Блин... Зачем только выходной лишний сделали?
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417553
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
левый мужик какой-то ... нет белого или черного ...

http://www.oracle.com/ru/oramag/augsept2003/index.html?dev_subtypes.html

Производительность подтипов

Если вы решите сравнить время выполнения обычного курсора, построенного на соединении таблиц EMP и DEPT, с версией, когда данные из таблицы DEPT содержатся в коллекции, то обнаружите, что "кэш"-версия медленнее. Существуют, однако, случаи, когда она может быть весьма удобной. Предположим, например, что обрабатываются две таблицы – одна содержит подписки на журнал, а другая используется для связи с подписчиками. Таблица subscription (подписка) состоит из 100,000 записей, а связанная таблица состоит из 400,000 записей. Для 100,000 подписок имеется примерно 50,000 различных записей в связанной таблице. При простом соединении двух таблиц, извлечение всех записей занимает значительное время – иногда около 45 секунд. Если создать версию с механизмом кэширования, то для извлечения тех же данных потребуется только 15 секунд, однако большинство связанных данных будут возвращены из переменной-коллекции.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417565
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ладно, пусть будут коллекции. Интересно, конечно, почему запрос так долго работает. Возможно, потому что в ORACLE нет кластерного идекса по int (4 байта)! Зря, я наверное на коллекции наезжать стал. Просто в MSSQL на среднем сервере это выполнится гораздо быстрее. Думаю, что и с тем запросом можно пошаманить, чтобы быстрее работал. Мне снапшоты больше нравятся Как-то они нагляднее, что ли.
...
Рейтинг: 0 / 0
Работа с коллекциями в T-SQL
    #32417733
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
исходя из того что они все таки создаются на винте.... 

Прошу прощения не знал ...
...
Рейтинг: 0 / 0
85 сообщений из 85, показаны все 4 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Работа с коллекциями в T-SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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