Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Помогите. Были написаны коды на PL/SQL. Их необходимо перевести на T-SQL (меняется БД). Есть ли аналог таблиц обьектов (table of object) (работы с коллекциями, в частности использование их в запросах) в T-SQL. Или придется переносить логику на клиента (С#) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 15:01 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Не имеется. А что вы подразумеваете под работы с коллекциями ? Зачем уж они так нужны? Может избавиться от них - все-равно придется бОльшую часть переписать -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 15:24 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Переписать понятное дело. А вы работали с коллекциями ? Просто те возможности которые они дают можно решить только курсорами и то не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 15:36 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Нет, не работал. Поэтому и спрашиваю - что это есть за работа, чтобы предложить как это сделать на MS SQL (или не делать :) -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 16:45 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Ну и чего такого они дают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 22:19 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Грубо говоря, это ассоциативные массивы (в 8-ке по integer, в 9-ке можно по varchar2) в памяти сеанса. Весьма удобны в работе и довольно широко используются в Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 07:33 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2Gluk (Kazan) А чем они отличаются от временных таблиц в MSSQL? Ассоциативный массив - это массив с обращениями не по индексу, а по значению ключа (как я понял из вашего описания). Вот в MSSQL это есть. И тоже очень широко используются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 13:01 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
в общем - вам придется переписать код на использование временных таблиц... Понятно что менее удобно - но такой уж TSQL - язык спартанцев и прочих... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 13:13 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 furnikov А вы видели, sql trace при обработке коллекций или вложенных таблиц на клиенте через функции OCI? ORACLE по каждому чиху загружает кучу ненужной информации о типе объекта из своих системных таблиц. Причем делает это не одним запросом, а целой серией маленьких ненужных запросиков. Что существенно увеличивает нагрузку на сеть и тормозит работу приложения. Если оно так же и на PL/SQL реализовано.... Тогда это должно тормозить уже на таблице с полумиллионом строк... /imho/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 13:26 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Кстати, временные таблицы гораздо удобнее - вы можете их использовать в запросах без открытия курсора. Естественно, всё быстрее работает. Так как оптимизатор может, например, распараллелить запрос, если сочтет нужным. А с коллекциями такого не сделать не удастся. В общем, забудьте о коллекциях - используйте временные таблицы. Поймете, что много потеряли, программируя на ORACLE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 13:31 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
ну ну - коллекции на клиенте... ну тогда да для вас ORACLE - это вообще не СУБД (тем более в сравнении с MS SQL) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 13:54 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 funikovyuri А можно какой-нибудь примерчик по применению коллекций? Хоть понять что это такое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 14:40 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Да, да, примерчик нам. И как именно у вас применяются -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 14:58 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
поскольку оракловые источники посмотреть похоже вам религия не позволяет, предлагаю смотреть сюда: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/architec/8_ar_ad_0hyx.asp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 21:24 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2 Gt. Без ёрничества конечно никак... Ну не знаю я ничего об Оракле - не было нужно - и где я эти источники буду искать? Неужели трудно пример какой? Я б чего-нибудь написал, если б мог. Приведённая Вами ссылка описывает English Query - скорее всего Вы ошиблись или тогда чё-то надо еще пояснить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 10:43 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
А при чем тут оракловые источники? Хочется узнать, как это использует Simple - может оно ему не надо -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 11:03 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
мда линк на 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 12:55 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2Gt. Вторая ссылка требует пароля... Вот у вас всё так... Это по MSSQL легко найти информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 13:04 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
зарегистрируйся - это бесплатно, лень? чуть шевилим мозгами и ... 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+ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 13:08 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Ну и правильно. В принципе, каждый столбец в отношении должен быть атомарным. А UDT с перегрузкой операций позволяют хранить в базе только отношения между атомарными столбцами, скрывая детали реализации структуры столбцов в UDT. Это может быть полезным, так как всё равно в наше время в высшые нормальные формы из-за лени мало кто базу переведёт. Но коллекции являются вариантом реализации именно отношений. Спрашивается, нафига тогда таблицы? На самом деле, я видел реализации постраничной подгрузки с помощью коллекций. Работало всё неимоверно медленно. Запрос с двумя подзапросами с использованием ROWNUM работал на порядок быстрее. (Особенно для первых страниц :)) .Если в случае Simple коллекции используются для альтернативы таблицам (а их приходится так использовать из-за неэффективной реализации временных таблиц в ORACLE), то замена их на таблицы при переходе на MSSQL будет вполне естественной и лишь увеличит производительность системы. /imho/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 13:18 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
2Gt. авторзарегистрируйся - это бесплатно, лень? Ну, что-бы узнать, что такое коллекции, заводить новый почтовый ящик, вводить сто полей в формах регистрации.... За гуглёвую ссылку спасибо - про поиск я как-то и не подумал :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 13:37 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Под коллекциями Oracle обычно подразумеваются PL/SQL-таблицы, начиная с Oracle8i дополнительно появились объектные таблицы. Первые представляют собой не более чем индексированные массивы, с ними нельзя работать через операторы SQL: SELECT, INSERT, UPDATE, etc, но в запросах можно использовать элементы массива, указывая его индекс. Объектные же таблицы могут использоваться точно так же, но возможностей у них гораздо больше: использование в запросах, создание обыкновенных таблиц на их основе, доступ к методам объектов таблицы и т.д. Главное отличие оракловых коллекций от временных таблиц ИМХО состоит в возможности передачи их в качестве аргумента процедуры (здесь я могу ошибаться, может это не так, т.е. в MSSQL можно "обмениваться" временными таблицами?) и хранении их экземпляров в контексте сессии. В MSSQL, насколько я знаю, отсутствует понятие пакета, или PACKAGE, где можно сохранять пользовательские переменные, к примеру, экземпляра массива. И если участки кода Oracle. использующие коллекции только "для внутреннего употребления", можно будет достаточно безболезненно переписать на использование временных таблиц, то код, использующий "разделяемые" коллекции, ИМХО придется переосмысливать полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 13:57 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
А вобще личных впечатлений и личного опыта хотелось. Ссылками то кидаться проще простого. Но видать не судьба. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 14:04 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Ораклисты - они все такие. В большинстве своём. Жизнь по книжкам учат, а не по опыту. Ссылка для них важнее, чем пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 14:25 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
www.fun4me.narod.ru А у сторонником MS SQL тогда есть черта - все чего нет в их любимой СУБД причислять к ненужному... P.S> мы же вроде про атомарность договорились (т.е. где imho) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 16:03 |
|
||
|
Работа с коллекциями в 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 |
|
||
|
Работа с коллекциями в 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 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
И это надо учитывать, и не увлекаться коллекциями. 2Fun давайте вы сначало msdn по диогонали почитаете, а потом неясные моменты мы и обсудим. например какое место MS отводит xml, как хранится/обрабатыватся, зачем тип XMLtype и т.п. может тогда чуть происнится чем не следует увлекатся и чье мнение нада учитывать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 21:06 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Ещё бы неплохо почитать, как XMLType в ORACLE реализован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 21:08 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Вот что пишет, например Шона Дилона (Sean Dillon): Sean Dillon Если вы храните свои данные в формате естественного XML, это не означает, что вы не можете использовать реляционный доступ. В СУБД Oracle9i вы можете создать представления ваших XML-данных, которые с помощью выражений языка XPath, конвейерных функций и индексов на базе функций (function-based indexes) обеспечат высокоскоростной реляционный доступ к вашим XML-данным. Это работает и может работать очень быстро, но имеет существенные накладные расходы, которые могут выйти за пределы допустимого, если вы для работы с данными всегда используете реляционный доступ. Единственная причина, по которой я могу оправдать хранение ваших данных только в формате естественного XML, – большую часть времени вы занимаетесь публикацией данных в виде XML-документов. Если же вам требуется реляционный доступ к данным время от времени, такой подход с хранением данных в формате естественного XML будет работать. Если большую часть времени вы занимаетесь доступом к данным с помощью реляционных запросов… Что же, читайте свои данные. ==================== Хорошая постановка задачи! Либо у вы практически не используете реляционного доступа, либо не можете гарантировать, что накладные расходы в вашей системе не выйдут за пределы допустимого. Это хорошо бы при сдаче продукта говорить, чтобы честнее быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 21:22 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
И, кстати, у меня был код, который не переносился в 9.2 из 9i из-за того, что в новой версии поменялся XMLType. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 21:25 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
И вообще для работы с XML/XSL документами используются специальные системы управления контентом. Хоть одну в пример приведите, в которых используется XMLType. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 21:30 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
слушай ладно я пропащий а ты то чего в пятницу вечером разашелся ? водку давно в такое время кушать :) про мужика дай урл, такого не знаем, надеюсь у него сайт не в домене народ.ру вот кусок из оракла мануала, наверника нечто подобное у 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 21:47 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
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 Меня угостили уже... Ещё часа в три... Хотел баг пофиксит..... Но видно выпил лишнего. Не знаю, как домой доехать. Вот и несу всякую чушь на форумах... Придётся во вторник. Блин... Зачем только выходной лишний сделали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 21:54 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
левый мужик какой-то ... нет белого или черного ... 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 секунд, однако большинство связанных данных будут возвращены из переменной-коллекции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 22:03 |
|
||
|
Работа с коллекциями в T-SQL
|
|||
|---|---|---|---|
|
#18+
Ну ладно, пусть будут коллекции. Интересно, конечно, почему запрос так долго работает. Возможно, потому что в ORACLE нет кластерного идекса по int (4 байта)! Зря, я наверное на коллекции наезжать стал. Просто в MSSQL на среднем сервере это выполнится гораздо быстрее. Думаю, что и с тем запросом можно пошаманить, чтобы быстрее работал. Мне снапшоты больше нравятся Как-то они нагляднее, что ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 22:25 |
|
||
|
|

start [/forum/topic.php?all=1&fid=35&tid=1554184]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
110ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 446ms |

| 0 / 0 |
