powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Циклы и IF'ы в Oracle по сравнению с MS SQL
25 сообщений из 134, страница 3 из 6
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233445
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!ну в этой редакции доки посчитали, что для девелопера будет удобней конструкцию которая является мостиком между двумя изолироваными мирами запихнуть в этот раздел, что с того ? это завется syntax sugar, от этого SQL не станет процедурней (гусары молчать, "особенную" субд не вспорминать ).И опять нет прямого ответа на вопрос :)
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233527
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyЯ попытался извиниться за необоснованное изменение личного обращения. Наша дискуссия началась на "ты". Некоторые участники форума, считают переход на "вы" оскорбительным - я не знаю точно отношения к данному вопросу каждого из участников (сам я достаточно безразличен к этому), но считаю, что извинение не помешает.

В свою очередь прошу прощения.
Я немножко излишне взвинчен сегодня (в связи с событиями не связанными с общением на форуме)
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233555
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey wrote:
> Например, с какой стати DML и DDL в один язык объединили? Вполне можно
> разными считать - в каждом свои сиинтаксические конструкции. Есть еще
Хм... а что, я могу перемежать, скажем, DML и DDL в pl/sql?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233570
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyХм... а что, я могу перемежать, скажем, DML и DDL в pl/sql?
В PL/SQL Вы можете, скажем, перемежать DML и операторы управления транзакциями. Не можете перемежать DML и DDL. Внимание, вопрос: сколько же в результате мы получаем языков, почему именно столько и какое отношение к этому имеет возможность перемежать?
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233626
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer wrote:
> В PL/SQL Вы можете, скажем, перемежать DML и операторы управления
> транзакциями. Не можете перемежать DML и DDL. Внимание, вопрос: сколько
> же в результате мы получаем языков, почему именно столько и какое
> отношение к этому имеет возможность перемежать?
а в т-скл можно перемежать... правда, не все ДДЛ допустимы, ессно....

в любом случае, в пл/скл граница куда более четкая, нежели в т-скл.
насколько это хорощо - вопрос десятый.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233686
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyв любом случае, в пл/скл граница куда более четкая, нежели в т-скл.
На практике - безусловно, куда более четкая. Правда, по моим, возможно неверным, представлениям это вызвано исключительно одной деталью - неявным возвратом рекордсетов, наличествующим в T-SQL. Согласитесь, например, что между

Код: plaintext
1.
2.
3.
-- sql
insert into "table" values ( 1 );
insert into "table" values ( 2 );
insert into "table" values ( 3 );

и

Код: plaintext
1.
2.
3.
4.
5.
-- pl/sql
begin
  insert into "table" values ( 1 );
  insert into "table" values ( 2 );
  insert into "table" values ( 3 );
end;

разницы, особенно внешней, не так много (и к сожалению не каждый ораклоид расскажет, в чем эта разница состоит). И по аналогичным причинам не особо видна разница между

Код: plaintext
1.
-- sql
select a, b, c from [table] where id = case when @a > @b then @a else @b end

и

Код: plaintext
1.
2.
3.
-- t-sql
if @a > @b
  then select a, b, c from [table] where id = @a
  else select a, b, c from [table] where id = @b

(прошу прощения за возможные ошибки, мысль, я думаю, понятна.
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233694
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
locky
а в т-скл можно перемежать... правда, не все ДДЛ допустимы, ессно....

перемежать и в оракле не проблема, проблема делать это в транзакции. в MSSQL точно также ничерта нельзя пережать на IL snapshot. для версионника это делать в транзакции криво идиологически ....
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233773
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer wrote:
> разницы, особенно внешней, не так много (и к сожалению не каждый
> ораклоид расскажет, в чем эта разница состоит). И по аналогичным
> причинам не особо видна разница между
Я, кстати, тоже не знаю - было интересно узнать, для "общего образования".

больше всего лично мне не нравится путаница в типах данных между скл и
пл/скл. обычно это вроде как не сильно важно, но иногда встреваем :(
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233834
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
locky
softwarer wrote:
> разницы, особенно внешней, не так много (и к сожалению не каждый
> ораклоид расскажет, в чем эта разница состоит). И по аналогичным
> причинам не особо видна разница между
Я, кстати, тоже не знаю - было интересно узнать, для "общего образования".

Ну например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> create table a(a number( 1 ));
Table created.
SQL> insert into a values( 1 );
 1  row created.
SQL> insert into a values( 10 );
insert into a values( 10 )
                     *
ERROR at line  1 :
ORA- 01438 : value larger than specified precision allows for this column

SQL> commit;
Commit complete.
SQL> select * from a;
         A
----------
          1 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> create table a(a number( 1 ));
Table created.
SQL> begin
   2    insert into a values( 1 );
   3    insert into a values( 10 );
   4   end;
   5   /
begin
*
ERROR at line  1 :
ORA- 01438 : value larger than specified precision allows for this column
ORA- 06512 : at line  3 

SQL> commit;
Commit complete.
SQL> select * from a;
no rows selected
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233884
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyЯ, кстати, тоже не знаю - было интересно узнать, для "общего образования".
Главным различием я бы назвал следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> create table inserted (i integer check (i <>  3 ));

Table created.

SQL> begin
   2     insert into inserted values ( 1 );
   3     insert into inserted values ( 2 );
   4     insert into inserted values ( 3 );
   5     insert into inserted values ( 4 );
   6   end;
   7   /

ERROR at line  1 :
ORA- 02290 : check constraint (TEST.SYS_C0010272) violated 
ORA- 06512 : at line  4  

SQL> select count(*) from inserted;

  COUNT(*)                                                                      
----------                                                                      
          0 

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

lockyбольше всего лично мне не нравится путаница в типах данных между скл и пл/скл. обычно это вроде как не сильно важно, но иногда встреваем :(
Лично меня раздражает отсутствие boolean в SQL. А вообще... сейчас это малоактуально, а в восьмерке очень мешало - делаешь запрос, отлаживаешь, все отлично, вставляешь в PL/SQL - а он, сволочь, не компилируется. Типа "эта фича SQL в PL/SQL не поддерживается".
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233912
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Лично меня раздражает отсутствие boolean в SQL. А вообще... сейчас это малоактуально, а в восьмерке очень мешало - делаешь запрос, отлаживаешь, все отлично, вставляешь в PL/SQL - а он, сволочь, не компилируется. Типа "эта фича SQL в PL/SQL не поддерживается".

сотню раз разжевывалось: прсото PL/SQL машина в момент компиляции проверяет синтаксис SQL, никакого отношения к PL/SQL они не имеют ...
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35233998
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer wrote:
> Главным различием я бы назвал следующее:
да, про это я как-то забыл - незакетченный эксепшн на блоке....

а булеан... ну, обойтись можно, хотя и странно получается: булевские
операции и условия - есть, а самого булеана - нету.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234020
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyа булеан... ну, обойтись можно
Можно, но глупо. Получается буквально следующее: я пишу функцию с результатом boolean, какую-нибудь проверку. В один прекрасный день мне хочется использовать ее в запросе, и наступает бред. Какое решение ни принимай - все, мягко говоря, не лучшее.
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234171
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
locky> Главным различием я бы назвал следующее:
да, про это я как-то забыл - незакетченный эксепшн на блоке....Но стоит отметить, что данное поведение не является отличием SQL и PL/SQL. Это просто общий для Oracle принцип "атомарности".
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234194
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey wrote:
> Но стоит отметить, что данное поведение не является отличием SQL и
> PL/SQL. Это просто общий для Oracle принцип "атомарности".
проведя опыты - мне не показалось, что это "общий принцип атомарности".
без анонимного блока - одна строка, с анонимным блоком - ни одной.
кроме того, поставив ексепт можно привести второй случай к первому
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234206
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.! wrote:
> версионника это делать в транзакции криво идиологически ....
но ведь делают, собственно.
пусть даже и говорят "это не в транзакции".
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234217
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyпроведя опыты - мне не показалось, что это "общий принцип атомарности"
Тем не менее, это так и есть. Чтобы увидеть это, сравните, например, в моем примере (с i < 3)

Код: plaintext
1.
2.
3.
insert into inserted values ( 1 );
insert into inserted values ( 2 );
insert into inserted values ( 3 );
insert into inserted values ( 4 );

и

Код: plaintext
insert into inserted select rownum from dual connect by level <  5 
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234248
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer wrote:
> Тем не менее, это так и есть. Чтобы увидеть это, сравните, например, в
> моем примере (с i < 3)
странный принцип, если честно.
наверное, дело вкуса.
набор стейтментов трактуется либо как набор (в первом случае), либо как
единый стейтмент (в случае с блоком). хотя - на то блок и есть блок.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234282
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyнабор стейтментов трактуется либо как набор (в первом случае),
Тут следует еще учесть, что в Oracle нет понятия "скрипт" или аналогичного (как в MS, если не ошибаюсь, batch). Набор стейтментов в первом случае - это server call с клиента для каждого insert-а поочередно.

lockyхотя - на то блок и есть блок.
Можно провести аналогию со вложенными транзакциями.
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234320
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyстранный принцип, если честно.
наверное, дело вкуса.А на мой взгляд, нарушение этого принципа крайне станно. Можно, конечно, считать это делом вкуса. Вообще-то, математически подобные программные системы описываются теорией автоматов. И если операция недопустима (типа исключение произошло), то автомат не меняет свое состояние.

lockyнабор стейтментов трактуется либо как набор (в первом случае), либо как
единый стейтмент (в случае с блоком). хотя - на то блок и есть блок.В том-то и дело, что в случае с блоком это нет набора "стейтментов", есть одно обращение к базе данных. На которое она естественным образом реагирует.
Собственно именно в этом месте, на мой взгляд, и есть основное идеологическое различие между PL/SQL И T-sql. Если первый с самого начала рос как процедурный язык интегрированный с SQL, то второй начинался скорее как скриптовый язык для работы с SQL-сервером. Это, естественно, мое субъективное восприятие, в упрощенном изложении :). Но оно живет у меня года с 95-го и никак не проходит. :)
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234349
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyА на мой взгляд, нарушение этого принципа крайне странно.
А я вполне понимаю обе точки зрения :)

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

Bogdanov AndreyИ если операция недопустима (типа исключение произошло), то автомат не меняет свое состояние.
Как мы с Вами знаем, в ряде аспектов состояние все-таки меняет. Поэтому выбор оказывается "в чем меняется, а в чем нет" - и это уже не вопрос формальной теории, вопрос практики.
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234413
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerСугубо формально можно сказать, что "когда сервер за меня что-то откатывает - это не есть хорошо, может я собирался исправить проблему и продолжить с места остановки".Эта позиция, на мой взгляд, крайне непродуктивна. По-моему, целостную парадигму на ее основе не построить. Ведь на самом деле даже при отдельно стоящем Insert его падению уже предшествовали какие-то действия (может быть там триггера были и т.п.), что-то в состоянии СУБД изменилось. К моменту получения exception успело выполниться несколько десятков (а может и сотен) команд процессора. Их мы тоже будем "продолжать с места остановки"? Все-таки все языки придерживаются принципа атомарности уровня оператора. Oracle просто попытался эту парадигму реализовать более глобально. Ну а насколько удачно - вопрос отдельный.
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234565
StX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StX
Гость
Yo.! locky
а в т-скл можно перемежать... правда, не все ДДЛ допустимы, ессно....

перемежать и в оракле не проблема, проблема делать это в транзакции. в MSSQL точно также ничерта нельзя пережать на IL snapshot. для версионника это делать в транзакции криво идиологически ....
Простите за оффтоп и позднее зажигание: почему вы считаете что для версионника криво иметь DDL в транзакции?
Контрпример - PostgreSQL, чистый версионник. За очень малым исключением (создание/удаление базы, tablespace и сборки мусора) DDL в транзакции допустим и работает абсолютно корректно.
Почему орден св.Оракла это запрещает?
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234798
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyЭта позиция, на мой взгляд, крайне непродуктивна.
Согласен. Я просто "истины ради" указал на возможность раскритиковать этот подход со стороны некоего также истинного утверждения (давайте не углубляться в детали атомарности... мне кажется, ситуация понятна - например, если я делал большой-большой апдейт, и он слетел на миллионной записи, я хочу повторить его с where id >= 1000000.

Как я уже указал выше, мне нравится этот оракловый подход по сугубо статистическим причинам (нередко удобно, никогда не мешает).
...
Рейтинг: 0 / 0
Циклы и IF'ы в Oracle по сравнению с MS SQL
    #35234875
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StXКонтрпример - PostgreSQL, чистый версионник. За очень малым исключением (создание/удаление базы, tablespace и сборки мусора) DDL в транзакции допустим и работает абсолютно корректно. Почему орден св.Оракла это запрещает?
Коллега Yo отчасти горячится, но в его словах есть доля истины. Давайте я выдам одно очевидное соображение, а вы уж решайте, что есть чистый версионник и корректная работа.

Утверждение: корректный внутритранзакционный DDL возможен только при serializable изоляции в жестком смысле этого слова (в том самом, в котором в Oracle вообще нет serializable) Обосновать это очень просто: представьте себе, что я делаю в транзакции некоторое изменение структуры таблицы, несовместимое со старой. Скажем, alter table drop column или alter table add foreign key. Далее в той же транзакции я делаю запрос к модифицированной таблице и как-то использую полученные данные. Проблема в том, что при любом уровне ниже serializable я при этом должен получить записи, параллельно вставленные другими транзакциями в старую версию структуры. Это выливается в проблемы либо на физическом уровне - то самое нет колонки, несовпадение форматов - либо, что куда страшнее, на логическом (новая логика захавала неконвертированные старые данные, нарушена целостность).

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

Прошу прощения, я не спал ночь, может завтра подумаю получше и решу, что неправ
...
Рейтинг: 0 / 0
25 сообщений из 134, страница 3 из 6
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Циклы и IF'ы в Oracle по сравнению с MS SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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