Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10 .. 23   вперед  Ctrl
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
SergSuper
Как-то не наглядно

А как-нибудь так можно?
update a
   set fld=(select b.fld  TableB b where a.id=b.id)
 from TableA a
 


Коррелированным запросом ? Не пробовал, наверное можно, но производительность ...
Что касается наглядности, форма проистекает из общей концепции редактируемых представлений. Это просто view не оформленное отдельным объектом. Соотвественно, в тех случаях когда разрешается редактировать view (ситуация с этим улучшалось от версии к версии) то эе разрешено и для inline view. Разумеется если представление оформлено как view, это позволяет задать нам произвольные правила редактирования при помощи instead of триггеров
25 янв 07, 10:36    [3691467]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67478
Блог
SergSuper
Пардон, но значит какой-то другой недостаток был. По-моему, из триггера на уровне оператора нельзя узнать какие строки и как(чем) обновляются.

Если я не ошибаюсь в mssql-терминологии, Вы имеете в виду отсутствие псевдотаблиц inserted/deleted. Их действительно нет, необходимости в них тоже не ощущается, хотя конечно есть задачи, которые можно было бы решать "и через них тоже".

SergSuper
Иначе почему оракловцы всё время говорят об триггера уровня строки, а мсскульщики не понимают зачем он нужен - того же функционала можно добиться и на уровне оператора.

"Можно" - не значит "нужно". Простой пример. Давайте предположим, что нам нужно написать триггер, поддерживающий поле A равным сумме полей B и C. В Oracle мы напишем так:

create trigger SomeTable_BIU 
  before insert or update of A, B, C 
  on SomeTable 
  for each row
begin
  :new.A := :new.B + :new.C ;
end ;

В триггере же уровня оператора придется действовать примерно так (прошу прощения за возможные ошибки)

create trigger SomeTable_AIU 
  on SomeTable 
  after insert, update
as
  update SomeTable set 
    A = B + C
  from SomeTable inner join 
    ( select SomeTable_ID from inserted 
      union all 
      select SomeTable_ID from updated ) 
    using SomeTable_ID ;
go

Первый вариант, признаться, мне кажется как минимум проще-понятнее-нагляднее. Кроме того, он не вызывает подозрений по поводу возможного оверхеда из-за выполнения "апдейта в триггере после основного апдейта" и не вызывает вопроса "а не зациклится ли вся эта конструкция".

SergSuper
А вот заодно еще такой вопрос: может я неправильно понял, но правда ли что в Оракле нельзя делать апдейт связывая таблицы, т.е.:

Вроде ж только на той неделе здесь же обсуждался этот вопрос. Можно, просто используется другой синтаксис, примерно так:

update (select a.id, a.fld, b.fld as new_value from a, b where a.id = b.id)
  set fld = new_value ;

pkarklin
Это управляемый процесс. Сравните:

Хм. То, что Вы написали, вызывает следующий вопрос: как именно будет проверен констрейнт, если он проверяется при включении? Не выйдет ли так, что будет проверен миллиард записей там, где было бы достаточно проверить одну-единственную вставленную-измененную?

SergSuper
А как-нибудь так можно?

Можно. Но не всегда удачно с точки зрения производительности.
25 янв 07, 11:19    [3691851]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
softwarer
update (select a.id, a.fld, b.fld as new_value from a, b where a.id = b.id)
  set fld = new_value ;


Тьфу. Думаю где не так, глаз режет.
Мои извинения
25 янв 07, 11:33    [3691969]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
softwarer

В триггере же уровня оператора придется действовать примерно так (прошу прощения за возможные ошибки)
прощаю
на самом деле так
create trigger SomeTable_AIU 
  on SomeTable 
  after insert, update
as
  update SomeTable set 
    A = t.B + t.C
  from SomeTable t 
  inner join inserted i on i.id=t.id

softwarer

Первый вариант, признаться, мне кажется как минимум проще-понятнее-нагляднее. Кроме того, он не вызывает подозрений по поводу возможного оверхеда из-за выполнения "апдейта в триггере после основного апдейта" и не вызывает вопроса "а не зациклится ли вся эта конструкция".

В принципе согласен, триггер на уровне строки не помешал бы, так же как и inserted и deleted (updated нету) в триггере на оператор для Оракла.
softwarer

pkarklin
Это управляемый процесс. Сравните:

Хм. То, что Вы написали, вызывает следующий вопрос: как именно будет проверен констрейнт, если он проверяется при включении? Не выйдет ли так, что будет проверен миллиард записей там, где было бы достаточно проверить одну-единственную вставленную-измененную?

Выйдет, я чуть выше и написал об этом
25 янв 07, 12:13    [3692395]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
softwarer
Хм. То, что Вы написали, вызывает следующий вопрос: как именно будет проверен констрейнт, если он проверяется при включении? Не выйдет ли так, что будет проверен миллиард записей там, где было бы достаточно проверить одну-единственную вставленную-измененную?


Будет именно так, как Вы сказали. И за наличие отложенной проверки я поставил +1 Oracle.
25 янв 07, 13:12    [3692889]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Правда ли то, что партиционирование в MS SQL на уровне партиционированных представлений Oracle 7 ? Т.е. строятся union all объединения, а оптимизатор умеет исключать таблицы из рассмотрения при обращении к представлению (если это возможно)
25 янв 07, 13:19    [3692989]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
Правда ли то, что партиционирование в MS SQL на уровне партиционированных представлений Oracle 7 ? Т.е. строятся union all объединения, а оптимизатор умеет исключать таблицы из рассмотрения при обращении к представлению (если это возможно)


Это было еще в 2000. В 2005 появилось Partitioned Tables and Indexes:

В следующем примере создается функция секционирования для разделения таблицы или индекса на четыре секции. Затем создается схема секционирования, определяющая файловые группы, в которых содержится каждая из четырех секций. Наконец, создается таблица, использующая схему секционирования. В примере предполагается, что в базе данных уже существуют файловые группы.

CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000) ;
GO
CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (test1fg, test2fg, test3fg, test4fg) ;
GO
CREATE TABLE PartitionTable (col1 int, col2 char(10))
ON myRangePS1 (col1) ;
GO
25 янв 07, 13:26    [3693044]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1728

А как в MSSQL обстоят дела с mutlitable insert?
Приходится имитировать триггерами или есть вменяемый аналог insert all?

Posted via ActualForum NNTP Server 1.3

25 янв 07, 13:28    [3693063]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
это не совсем точно.
такая схема партицирования была в SQL Server 2000, в последующей версии - 2005 - есть партицирование таблиц на основе специальных функций (задание интервалов). Так же есть выравнивание индексов разных таблиц. Например, при связке master-detail индексы могут быть расположены "рядом" для удобства выборок.
25 янв 07, 13:28    [3693069]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
Это было еще в 2000. В 2005 появилось Partitioned Tables and Indexes:


В 9i можно создавать подпартиции. Например партиции по хэшу, подпартиции по диапазонам.
А как дела с индексами локально/глобально партиционированными ?
25 янв 07, 13:37    [3693148]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
pkarklin
Это было еще в 2000. В 2005 появилось Partitioned Tables and Indexes:


В 9i можно создавать подпартиции. Например партиции по хэшу, подпартиции по диапазонам.
А как дела с индексами локально/глобально партиционированными ?


С помощью ALTER PARTITION FUNCTION напрямую можно только только разбить одну секцию на две или слить две секций в одну. Остальные манипуляции (из 10 секций сделать 5) потребуют более чем одной инструкции.

Индексы партицируются аналогично таблицам.
25 янв 07, 13:47    [3693221]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
SeaGate

А как в MSSQL обстоят дела с mutlitable insert?
Приходится имитировать триггерами или есть вменяемый аналог insert all?
Posted via ActualForum NNTP Server 1.3


INSERT, UPDATE, DELETE могут обрабатывать одну единственную таблицу. "Имитирую" в хп.
25 янв 07, 13:50    [3693255]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
INSERT, UPDATE, DELETE могут обрабатывать одну единственную таблицу. "Имитирую" в хп.


insert all полезен при наполнении кластера
25 янв 07, 14:01    [3693353]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
pkarklin
INSERT, UPDATE, DELETE могут обрабатывать одну единственную таблицу. "Имитирую" в хп.


insert all полезен при наполнении кластера


Кого и чем наполняем?! Чуть по-подробнее можно?
25 янв 07, 14:03    [3693367]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67478
Блог
pkarklin
Кого и чем наполняем?! Чуть по-подробнее можно?

Кластер - это физическая структура данных, в которой несколько таблиц сидят на общем индексе. Скажем, таблицы "документ" и "позиции документа" совмещены в кластер, в результате чего позиции физически соседствуют со своим заголовком.
25 янв 07, 14:27    [3693569]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
это единственный объект, блоки которого могут содержать строки нескольких таблиц, в том числе связанных 1:N. Ну и данные в нем разумеется кластеризованы по BTree либо хэш
25 янв 07, 14:34    [3693636]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
kennethr
Member

Откуда:
Сообщений: 175
При беглом просмотре в возможностях аналитических функций Oracle на порядок превосходит MS SQL. Лично для меня при переходе с 8i на 9i это стало одним из главных преимуществом. Очень полезная вещь.
25 янв 07, 14:35    [3693642]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
softwarer
pkarklin
Кого и чем наполняем?! Чуть по-подробнее можно?

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


Понятно. Прямого аналога нет. Нечто отдаленно напоминающее описал в своем посте AAron.
25 янв 07, 14:35    [3693648]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
что то вроде заранее выполненного join-а.
наполнить его данными отдельными insert-ами, не нарушив кластеризацию проблематично
insert all помогает
25 янв 07, 14:36    [3693653]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Аналитических ("оконных") функций в 2005 всего 4: RANK, NTILE, DENSE_RANK, ROW_NUMBER.
25 янв 07, 14:55    [3693820]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
что то вроде заранее выполненного join-а.
наполнить его данными отдельными insert-ами, не нарушив кластеризацию проблематично
insert all помогает


Ну, раз MS SQL не имеет структуры, аналогичной кластеру Oracle, то и инчтрумента по его заполнению тоже нет.
25 янв 07, 14:57    [3693830]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Yo.!
Guest
На счет моего опуса, понятно я немного сутрировал но пока как я понимаю претензии только к выводам ?

к стате было бы интересно еще стандбай сравнить, по слухам там тоже много чего нехватает у МС.


pkarklin

Разнести нагрузку создаваемую отдельно механизмом поддержки версионности и остальной активностью, для которой нужна tempdb возможности нет. Возможно только увеличить общую производительность при работе с tempdb.

ну да, что я и хотел показать - для моих 3х дисков адекватно распределить i/o невыйдет, в оракле же я могу распределить в плоть до отдельных транзакций.
25 янв 07, 15:22    [3694075]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
Ну, раз MS SQL не имеет структуры, аналогичной кластеру Oracle, то и инчтрумента по его заполнению тоже нет.


кластерный индекс не похож ?
25 янв 07, 15:23    [3694082]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
pkarklin
Ну, раз MS SQL не имеет структуры, аналогичной кластеру Oracle, то и инчтрумента по его заполнению тоже нет.


кластерный индекс не похож ?


Кластерный индекс принадлежит только одной таблицы. Соответственно создать структуру, аналогичную:

softwarer
Кластер - это физическая структура данных, в которой несколько таблиц сидят на общем индексе.


нет возможности.
25 янв 07, 15:25    [3694098]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Вот что хотел спросить. Есть ли в Oracle DDL триггеры?
25 янв 07, 15:31    [3694145]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10 .. 23   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить