Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10 11   вперед  Ctrl      все
 Re: Чем MS SQL Server хуже Oracle Database?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
softwarer
Ну, кривой и противоречащий стандарту unique constraint - это тоже документированное поведение.



CREATE TABLE T1(col1 char(1) NULL)
GO

CREATE UNIQUE INDEX IX_T1_col1 ON T1(col1) WHERE col1 IS NOT NULL
GO


softwarer
Бага не перестаёт быть багой от того, что её записали в документацию.


Не буду, пожалуй, опускаться вновь до перечисления противоречящих стандарту и документированных баг, которые можно найти в любой СУБД.
21 мар 12, 20:19    [12291199]     Ответить | Цитировать Сообщить модератору
 Re: Чем MS SQL Server хуже Oracle Database?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
pt12pt
Что здесь проктологического?

Много всего:

  • Наличие у хранимых процедур необъявленных входных и выходных параметров
  • Наличие у хранимых процедур плохо контролируемых побочных эффектов
  • Передача важнейшей информации через неструктурированную глобальную переменную, аналог фортрановских "общих областей" (это такое достижение технологии 1957-го года, убрано из языка как устаревшее и неадекватное кажется в 1977-м)

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

    pt12pt
    В Оракле же мало того, что используется специальный язык,



    pt12pt
    ну бог с ним вам необходимо объявить курсорную переменную, заполнить ее данными и вернуть

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

    static public int getListCount(List list) {
      return list == null ? 0 : list.size();
    }
    


    по аналогии, когда Вы в PL/SQL хотите посчитать количество строк в таблице, Вы пишете

    function tableCount return integer is
      cnt integer;
    begin
      select count(*) into cnt from table;
      return cnt;
    end;
    


    Конечно, можно пытаться назвать это проктологией, но тогда придётся чохом занести в это понятие практически все языки программирования, разработанные начиная с 60-х годов. По мне всё же "извращенцев" стоит искать среди желающих возвращать результаты работы каким-то другим способом.
  • 21 мар 12, 20:28    [12291231]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    locky
    а насчет "противоречащий стандарту" - главное чтобы не противоречило здравому смыслу и потребностям, остальное - от лукавого.

    Согласен. Собственно моё большое удивление по поводу unique в mssql вызвано именно его категорическим противоречием здравому смыслу. Стандарт же я здесь упомянул только для подчёркивания противопоставления "документированному поведению". Там, где стандарт противоречит здравому смыслу (например, в требовании различать null и пустую строку) я сам с большим удовольствием поддерживаю забивание на стандарт.
    21 мар 12, 20:32    [12291251]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    softwarer
    Конечно, можно пытаться назвать это проктологией, но тогда придётся чохом занести в это понятие практически все языки программирования, разработанные начиная с 60-х годов. По мне всё же "извращенцев" стоит искать среди желающих возвращать результаты работы каким-то другим способом.

    нуну :)
    Ну не нравится вам возвращать рекордсеты - используйте OUT параметры, кто ж вам мешает то?
    как по мне, так лучше иметь 2 (или более) способа выполнить некую задачу, нежели с пеной у рта доказывать всем и каждому "есть только один исконно правильный способ, нужно использовать его! Ведь по другому то и не сделаешь!"
    21 мар 12, 20:33    [12291253]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    pkarklin
    Member

    Откуда: Москва (Муром)
    Сообщений: 74930
    softwarer
    Наличие у хранимых процедур необъявленных ... выходных параметров


    Вот здесь можно прочитать о новой опции EXECUTE - WITH <result_sets_definition>. Приведу только пример:

    USE AdventureWorks2012;
    GO
    
    --Create the procedure
    CREATE PROC Production.ProductList @ProdName nvarchar(50)
    AS
    -- First result set
    SELECT ProductID, Name, ListPrice
        FROM Production.Product
        WHERE Name LIKE @ProdName;
    -- Second result set 
    SELECT Name, COUNT(S.ProductID) AS NumberOfOrders
        FROM Production.Product AS P
        JOIN Sales.SalesOrderDetail AS S
            ON P.ProductID  = S.ProductID 
        WHERE Name LIKE @ProdName
        GROUP BY Name;
    GO
    
    -- Execute the procedure 
    EXEC Production.ProductList '%tire%'
    WITH RESULT SETS 
    (
        (ProductID int,   -- first result set definition starts here
        Name Name,
        ListPrice money)
        ,                 -- comma separates result set definitions
        (Name Name,       -- second result set definition starts here
        NumberOfOrders int)
    );
    
    21 мар 12, 20:33    [12291256]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    pkarklin
    Member

    Откуда: Москва (Муром)
    Сообщений: 74930
    Сорри, ссылка: http://msdn.microsoft.com/en-us/library/ms188332(v=sql.110).aspx
    21 мар 12, 20:34    [12291262]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    softwarer
    locky
    а насчет "противоречащий стандарту" - главное чтобы не противоречило здравому смыслу и потребностям, остальное - от лукавого.

    Согласен. Собственно моё большое удивление по поводу unique в mssql вызвано именно его категорическим противоречием здравому смыслу. Стандарт же я здесь упомянул только для подчёркивания противопоставления "документированному поведению". Там, где стандарт противоречит здравому смыслу (например, в требовании различать null и пустую строку) я сам с большим удовольствием поддерживаю забивание на стандарт.

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

    Но, тем не менее, UQ с множественными NULL значениями - в скуле таки есть, реализуемы.
    И, видимо, в оракуле аналогичным образом реализуемы UQ с единственным NULL значением.
    21 мар 12, 20:35    [12291270]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    Что интересно, ораклоиды крайне редко приводят в качестве примеров того, что у них есть хорошего - действительно интересные и хорошие вещи
    До сих пор удивляюсь - почему так происходит.
    21 мар 12, 20:37    [12291276]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    pkarklin
    Member

    Откуда: Москва (Муром)
    Сообщений: 74930
    Я могу в Oracle написать такую функцию (утрировано):

    function tableCount return integer is
      cnt integer;
    begin
      DELETE * into cnt from table;
      return cnt;
    end;
    
    21 мар 12, 20:46    [12291316]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    pkarklin
    Member

    Откуда: Москва (Муром)
    Сообщений: 74930
    ?
    21 мар 12, 20:46    [12291322]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    pkarklin
    Я могу в Oracle написать такую функцию (утрировано):

    function tableCount return integer is
      cnt integer;
    begin
      DELETE * into cnt from table;
      return cnt;
    end;
    

    Да, но в DML вызывать нельзя, только procedure-like
    21 мар 12, 20:48    [12291332]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    Alexander Ryndin
    Member

    Откуда:
    Сообщений: 4919
    Блог
    locky
    Что интересно, ораклоиды крайне редко приводят в качестве примеров того, что у них есть хорошего - действительно интересные и хорошие вещи
    До сих пор удивляюсь - почему так происходит.
    Просто обычно специалист хорошо знает одну систему и не мыслит, что какая-то очевидная для него вещь отсутствует в другой базе данных.

    Ну, например, возьмите систему встроенных пакетов Oracle. Можно открывать по очереди и узнавать, и узнавать новое. И этого обычно нет в MSSQL. Но даже если не сравнивать набор этих возможностей, а просто глянуть на то, что у MSSQL имена хранимых процедур находятся в одном измерении, то можно привести в ужас бывалого разработчика pl/sql.
    21 мар 12, 20:56    [12291369]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    pkarklin
    Member

    Откуда: Москва (Муром)
    Сообщений: 74930
    locky
    Да, но в DML вызывать нельзя, только procedure-like


    Т.е., грубо, в коде вызвать можно:

    а =  tableCount 
    


    Тогда здесь тот же самый side effect.
    21 мар 12, 20:57    [12291372]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    Alexander Ryndin
    locky
    Что интересно, ораклоиды крайне редко приводят в качестве примеров того, что у них есть хорошего - действительно интересные и хорошие вещи
    До сих пор удивляюсь - почему так происходит.
    Просто обычно специалист хорошо знает одну систему и не мыслит, что какая-то очевидная для него вещь отсутствует в другой базе данных.

    Ну, например, возьмите систему встроенных пакетов Oracle. Можно открывать по очереди и узнавать, и узнавать новое. И этого обычно нет в MSSQL. Но даже если не сравнивать набор этих возможностей, а просто глянуть на то, что у MSSQL имена хранимых процедур находятся в одном измерении, то можно привести в ужас бывалого разработчика pl/sql.

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

    А вот что касается "специалист знает одну систему" - ну дак может оные "специалисты" просто.... ээээ... слегка "зашорены"? Ну или просто не умеют пользоваться другими системами, откуда и возникает это вот "а у вас всё не по людски!А вот у нас...."

    зы обычно "узнают новое" из документации, а не копаясь в "системных пакетах". но это тоже - лирика.
    21 мар 12, 21:00    [12291391]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    pkarklin
    locky
    Да, но в DML вызывать нельзя, только procedure-like


    Т.е., грубо, в коде вызвать можно:

    а =  tableCount 
    


    Тогда здесь тот же самый side effect.

    Ну, тут сайд-эффекта то нету
    ты фактически вызвал процедуру, которую смеха ради оформил функцией.
    21 мар 12, 21:01    [12291397]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    pkarklin
    Member

    Откуда: Москва (Муром)
    Сообщений: 74930
    softwarer
    Передача важнейшей информации через неструктурированную глобальную переменную, аналог фортрановских "общих областей" (это такое достижение технологии 1957-го года, убрано из языка как устаревшее и неадекватное кажется в 1977-м)


    Для многих разработчиков, использующих не Oracle, выглядит странным, что запрос (и это может быть не только SELECT), возвращающий резалтсет клиенту, может быть отправлен, напрямую с клиента, но точно такой же запрос нельзя обернуть в "модуль" и получить результат "тем же образом".

    Так можно договорится до того, что в Pascal надо было не допускать использования writeln в процедурах и функциях, ибо непонятно, куда же информация передается из процедуры.
    21 мар 12, 21:01    [12291399]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    pkarklin
    Member

    Откуда: Москва (Муром)
    Сообщений: 74930
    locky
    Ну, тут сайд-эффекта то нету
    ты фактически вызвал процедуру, которую смеха ради оформил функцией.


    Т.е. сайд эффект, таки, не зависит от того, что написано внутри, а от "способа" вызова...

    ЗЫ. Слава Богу, что в MS SQL хп нельзя использовать в SELECTах, а в функциях CUD не к локальным табличным переменным. :)
    21 мар 12, 21:08    [12291428]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    pkarklin
    locky
    Ну, тут сайд-эффекта то нету
    ты фактически вызвал процедуру, которую смеха ради оформил функцией.


    Т.е. сайд эффект, таки, не зависит от того, что написано внутри, а от "способа" вызова...

    ЗЫ. Слава Богу, что в MS SQL хп нельзя использовать в SELECTах, а в функциях CUD не к локальным табличным переменным. :)

    А может и не слава богу....
    Мы то выкручивались, но сколько это крови требовало :)
    21 мар 12, 21:09    [12291433]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    locky
    как по мне, так лучше иметь 2 (или более) способа выполнить некую задачу,

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

    locky
    нежели с пеной у рта доказывать всем и каждому "есть только один исконно правильный способ, нужно использовать его! Ведь по другому то и не сделаешь!"

    Тем не менее я рад, что многие выдающиеся учёные с пеной у рта доказали таки всем и каждому, что надо выкинуть из языков программирования такие способы выполнить задачу, как операторы ALTER PERFORM и ASSIGNABLE GOTO, альтернативные точки входа в функции, COMMON области, GOTO в тело другой подпрограммы и целый ряд прочих подобных фич.

    pkarklin
    Вот здесь можно прочитать о новой опции EXECUTE - WITH <result_sets_definition>. Приведу только пример:

    Если я правильно понял, то это косметическое изменение, от которого я не ждал бы большого эффекта. В лучшем случае оно улучшит диагностику проблемных ситуаций "когда всё уже упало" - вместо невнятного падения ХП в случайном месте со случайной диагностикой будет падение с диагностикой "кривые входные резалтсеты". Но более важно то, что если ХП вызывается из двадцати мест, то это требует писать одно и то же в двадцати местах?

    locky
    Но, тем не менее, UQ с множественными NULL значениями - в скуле таки есть, реализуемы.

    Безусловно. Напоминаю Вам, что я здесь не нападаю на MSSQL, а всего лишь дезавуирую аргумент "документировано - значит правильно", выдвинутый Павлом. Мог бы, конечно, дезавуировать на примере документированных оракловых нуллов - но по мне это было бы демагогией.

    pkarklin
    Я могу в Oracle написать такую функцию (утрировано):

    function tableCount return integer is
      cnt integer;
    begin
      DELETE * into cnt from table;
      return cnt;
    end;
    

    Если я правильно понял, что Вы хотите, то это пишется так:

    function deleteTable return integer is
    begin
      delete from table;
      return sql%rowcount;
    end;
    


    Я согласен с тем, что здесь есть глобальная переменная, что не очень хорошо. Но аналогии с common областями (если Вы имели её в виду) я здесь не вижу, поскольку эту возможность никто и никогда не использовал для межпроцедурного взаимодействия. Я на самом деле даже не знаю, можно ли её теоретически так использовать :)

    locky
    Что интересно, ораклоиды крайне редко приводят в качестве примеров того, что у них есть хорошего

    В свете специфики типичного "сравнения" это неудивительно. Меня удивляет как раз то, что мссклщики козыряют фигнёй вместо тех немногих вещей, которые у них действительно лучше (ну дисклеймер - немногих, которые я знаю. может, многих хороших не знаю).
    21 мар 12, 21:10    [12291440]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    pkarklin
    Для многих разработчиков, использующих не Oracle, выглядит странным, что запрос (и это может быть не только SELECT), возвращающий резалтсет клиенту, может быть отправлен, напрямую с клиента, но точно такой же запрос нельзя обернуть в "модуль" и получить результат "тем же образом".

    Я не очень понимаю, зачем его во что-то оборачивать.

    pkarklin
    Так можно договорится до того, что в Pascal надо было не допускать использования writeln в процедурах и функциях, ибо непонятно, куда же информация передается из процедуры.

    Ну если человек перенаправит stdout и построит взаимодействие внутри приложения по принципу "одна процедура пишет writeln-ами, другая читал readln-ами", я пожалуй таки уверенно назову его нестандартно ориентированным. Что же до Pascal, то writeln из него надо было выкинуть ещё в середине девяностых, равно как и сейчас наблюдается ну просто волшебная корреляция между флагом "говнокод" и наличием в тексте всяких system.out.println.
    21 мар 12, 21:15    [12291469]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    softwarer
    В свете специфики типичного "сравнения" это неудивительно. Меня удивляет как раз то, что мссклщики козыряют фигнёй вместо тех немногих вещей, которые у них действительно лучше (ну дисклеймер - немногих, которые я знаю. может, многих хороших не знаю).

    Да нам это как-то и не надо, козырять то :)
    Как правило, стандартных ответов всего два: "зато мы работаем под линуксом" и "этого у нас нет, потому что это нам не нужно (да и нету у нас этого)"


    ну и плюс - и правда мало людей, которые бы сопоставимое время работали с оракулом и со скулём, так, чтобы сравнить - насколько более разным получается сопоставимый код, выполняющий одинаковую работу.

    зы - я вот как раз из них :)
    21 мар 12, 21:16    [12291474]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    locky
    Да нам это как-то и не надо, козырять то :)

    К сожалению, практика не подтверждает истинность Ваших слов. Если очень не лень, сделайте поиск по форуму - несколько лет назад я делал глобальную выборку "холиварных" топиков форума на предмет "кто их начал: ораклоид/мссклщик/неизвестно". В итоге примерно 100% топиков были начаты мссклщиком с общим девизом "почему все кричат про крутоту оракла, когда у нас не хуже".

    locky
    Как правило, стандартных ответов всего два:

    Правильно. Обратите внимание: ответов. А ответов на что?
    21 мар 12, 21:20    [12291496]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    softwarer
    Правильно. Обратите внимание: ответов. А ответов на что?

    На любой аргумент.
    21 мар 12, 21:21    [12291498]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    locky
    Member

    Откуда: Харьков, Украина
    Сообщений: 62034
    ну и, разумеется, неповторимое "у нас это есть с 1993 года/с семёрки"
    21 мар 12, 21:22    [12291500]     Ответить | Цитировать Сообщить модератору
     Re: Чем MS SQL Server хуже Oracle Database?  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    locky
    softwarer
    Правильно. Обратите внимание: ответов. А ответов на что?

    На любой аргумент.

    Ну собственно про "кому надо козырять" вроде как уже очевидно.
    21 мар 12, 21:24    [12291514]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10 11   вперед  Ctrl      все
    Все форумы / Сравнение СУБД Ответить