|
|
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
Yo.!ну в этой редакции доки посчитали, что для девелопера будет удобней конструкцию которая является мостиком между двумя изолироваными мирами запихнуть в этот раздел, что с того ? это завется syntax sugar, от этого SQL не станет процедурней (гусары молчать, "особенную" субд не вспорминать ).И опять нет прямого ответа на вопрос :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 15:53 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyЯ попытался извиниться за необоснованное изменение личного обращения. Наша дискуссия началась на "ты". Некоторые участники форума, считают переход на "вы" оскорбительным - я не знаю точно отношения к данному вопросу каждого из участников (сам я достаточно безразличен к этому), но считаю, что извинение не помешает. В свою очередь прошу прощения. Я немножко излишне взвинчен сегодня (в связи с событиями не связанными с общением на форуме) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 16:23 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey wrote: > Например, с какой стати DML и DDL в один язык объединили? Вполне можно > разными считать - в каждом свои сиинтаксические конструкции. Есть еще Хм... а что, я могу перемежать, скажем, DML и DDL в pl/sql? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 16:33 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
lockyХм... а что, я могу перемежать, скажем, DML и DDL в pl/sql? В PL/SQL Вы можете, скажем, перемежать DML и операторы управления транзакциями. Не можете перемежать DML и DDL. Внимание, вопрос: сколько же в результате мы получаем языков, почему именно столько и какое отношение к этому имеет возможность перемежать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 16:39 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > В PL/SQL Вы можете, скажем, перемежать DML и операторы управления > транзакциями. Не можете перемежать DML и DDL. Внимание, вопрос: сколько > же в результате мы получаем языков, почему именно столько и какое > отношение к этому имеет возможность перемежать? а в т-скл можно перемежать... правда, не все ДДЛ допустимы, ессно.... в любом случае, в пл/скл граница куда более четкая, нежели в т-скл. насколько это хорощо - вопрос десятый. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 16:54 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
lockyв любом случае, в пл/скл граница куда более четкая, нежели в т-скл. На практике - безусловно, куда более четкая. Правда, по моим, возможно неверным, представлениям это вызвано исключительно одной деталью - неявным возвратом рекордсетов, наличествующим в T-SQL. Согласитесь, например, что между Код: plaintext 1. 2. 3. и Код: plaintext 1. 2. 3. 4. 5. разницы, особенно внешней, не так много (и к сожалению не каждый ораклоид расскажет, в чем эта разница состоит). И по аналогичным причинам не особо видна разница между Код: plaintext 1. и Код: plaintext 1. 2. 3. (прошу прощения за возможные ошибки, мысль, я думаю, понятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 17:08 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
locky а в т-скл можно перемежать... правда, не все ДДЛ допустимы, ессно.... перемежать и в оракле не проблема, проблема делать это в транзакции. в MSSQL точно также ничерта нельзя пережать на IL snapshot. для версионника это делать в транзакции криво идиологически .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 17:10 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > разницы, особенно внешней, не так много (и к сожалению не каждый > ораклоид расскажет, в чем эта разница состоит). И по аналогичным > причинам не особо видна разница между Я, кстати, тоже не знаю - было интересно узнать, для "общего образования". больше всего лично мне не нравится путаница в типах данных между скл и пл/скл. обычно это вроде как не сильно важно, но иногда встреваем :( Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 17:27 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
locky softwarer wrote: > разницы, особенно внешней, не так много (и к сожалению не каждый > ораклоид расскажет, в чем эта разница состоит). И по аналогичным > причинам не особо видна разница между Я, кстати, тоже не знаю - было интересно узнать, для "общего образования". Ну например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 17:42 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
lockyЯ, кстати, тоже не знаю - было интересно узнать, для "общего образования". Главным различием я бы назвал следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. На собеседовании кроме того был бы рад услышать соображения на тему разницы в скорости выполнения между этими случаями. Не буду клясться, что это вся разница, но кроме этого существенных соображений в голову не приходит. lockyбольше всего лично мне не нравится путаница в типах данных между скл и пл/скл. обычно это вроде как не сильно важно, но иногда встреваем :( Лично меня раздражает отсутствие boolean в SQL. А вообще... сейчас это малоактуально, а в восьмерке очень мешало - делаешь запрос, отлаживаешь, все отлично, вставляешь в PL/SQL - а он, сволочь, не компилируется. Типа "эта фича SQL в PL/SQL не поддерживается". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 17:53 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
softwarer Лично меня раздражает отсутствие boolean в SQL. А вообще... сейчас это малоактуально, а в восьмерке очень мешало - делаешь запрос, отлаживаешь, все отлично, вставляешь в PL/SQL - а он, сволочь, не компилируется. Типа "эта фича SQL в PL/SQL не поддерживается". сотню раз разжевывалось: прсото PL/SQL машина в момент компиляции проверяет синтаксис SQL, никакого отношения к PL/SQL они не имеют ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 18:03 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > Главным различием я бы назвал следующее: да, про это я как-то забыл - незакетченный эксепшн на блоке.... а булеан... ну, обойтись можно, хотя и странно получается: булевские операции и условия - есть, а самого булеана - нету. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 18:28 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
lockyа булеан... ну, обойтись можно Можно, но глупо. Получается буквально следующее: я пишу функцию с результатом boolean, какую-нибудь проверку. В один прекрасный день мне хочется использовать ее в запросе, и наступает бред. Какое решение ни принимай - все, мягко говоря, не лучшее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 18:37 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
locky> Главным различием я бы назвал следующее: да, про это я как-то забыл - незакетченный эксепшн на блоке....Но стоит отметить, что данное поведение не является отличием SQL и PL/SQL. Это просто общий для Oracle принцип "атомарности". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 19:25 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey wrote: > Но стоит отметить, что данное поведение не является отличием SQL и > PL/SQL. Это просто общий для Oracle принцип "атомарности". проведя опыты - мне не показалось, что это "общий принцип атомарности". без анонимного блока - одна строка, с анонимным блоком - ни одной. кроме того, поставив ексепт можно привести второй случай к первому Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 19:37 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
Yo.! wrote: > версионника это делать в транзакции криво идиологически .... но ведь делают, собственно. пусть даже и говорят "это не в транзакции". Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 19:42 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
lockyпроведя опыты - мне не показалось, что это "общий принцип атомарности" Тем не менее, это так и есть. Чтобы увидеть это, сравните, например, в моем примере (с i < 3) Код: plaintext 1. 2. 3. и Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 19:48 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > Тем не менее, это так и есть. Чтобы увидеть это, сравните, например, в > моем примере (с i < 3) странный принцип, если честно. наверное, дело вкуса. набор стейтментов трактуется либо как набор (в первом случае), либо как единый стейтмент (в случае с блоком). хотя - на то блок и есть блок. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 19:58 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
lockyнабор стейтментов трактуется либо как набор (в первом случае), Тут следует еще учесть, что в Oracle нет понятия "скрипт" или аналогичного (как в MS, если не ошибаюсь, batch). Набор стейтментов в первом случае - это server call с клиента для каждого insert-а поочередно. lockyхотя - на то блок и есть блок. Можно провести аналогию со вложенными транзакциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 20:21 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
lockyстранный принцип, если честно. наверное, дело вкуса.А на мой взгляд, нарушение этого принципа крайне станно. Можно, конечно, считать это делом вкуса. Вообще-то, математически подобные программные системы описываются теорией автоматов. И если операция недопустима (типа исключение произошло), то автомат не меняет свое состояние. lockyнабор стейтментов трактуется либо как набор (в первом случае), либо как единый стейтмент (в случае с блоком). хотя - на то блок и есть блок.В том-то и дело, что в случае с блоком это нет набора "стейтментов", есть одно обращение к базе данных. На которое она естественным образом реагирует. Собственно именно в этом месте, на мой взгляд, и есть основное идеологическое различие между PL/SQL И T-sql. Если первый с самого начала рос как процедурный язык интегрированный с SQL, то второй начинался скорее как скриптовый язык для работы с SQL-сервером. Это, естественно, мое субъективное восприятие, в упрощенном изложении :). Но оно живет у меня года с 95-го и никак не проходит. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 21:22 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyА на мой взгляд, нарушение этого принципа крайне странно. А я вполне понимаю обе точки зрения :) Сугубо формально можно сказать, что "когда сервер за меня что-то откатывает - это не есть хорошо, может я собирался исправить проблему и продолжить с места остановки". Однако на практике это удачное соглашение; я не припомню, чтобы оно мне мешало, зато в ряде случаев оно делает хороший код проще, а тупой код - надежнее. Bogdanov AndreyИ если операция недопустима (типа исключение произошло), то автомат не меняет свое состояние. Как мы с Вами знаем, в ряде аспектов состояние все-таки меняет. Поэтому выбор оказывается "в чем меняется, а в чем нет" - и это уже не вопрос формальной теории, вопрос практики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 21:37 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
softwarerСугубо формально можно сказать, что "когда сервер за меня что-то откатывает - это не есть хорошо, может я собирался исправить проблему и продолжить с места остановки".Эта позиция, на мой взгляд, крайне непродуктивна. По-моему, целостную парадигму на ее основе не построить. Ведь на самом деле даже при отдельно стоящем Insert его падению уже предшествовали какие-то действия (может быть там триггера были и т.п.), что-то в состоянии СУБД изменилось. К моменту получения exception успело выполниться несколько десятков (а может и сотен) команд процессора. Их мы тоже будем "продолжать с места остановки"? Все-таки все языки придерживаются принципа атомарности уровня оператора. Oracle просто попытался эту парадигму реализовать более глобально. Ну а насколько удачно - вопрос отдельный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 22:37 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
Yo.! locky а в т-скл можно перемежать... правда, не все ДДЛ допустимы, ессно.... перемежать и в оракле не проблема, проблема делать это в транзакции. в MSSQL точно также ничерта нельзя пережать на IL snapshot. для версионника это делать в транзакции криво идиологически .... Простите за оффтоп и позднее зажигание: почему вы считаете что для версионника криво иметь DDL в транзакции? Контрпример - PostgreSQL, чистый версионник. За очень малым исключением (создание/удаление базы, tablespace и сборки мусора) DDL в транзакции допустим и работает абсолютно корректно. Почему орден св.Оракла это запрещает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 03:37 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyЭта позиция, на мой взгляд, крайне непродуктивна. Согласен. Я просто "истины ради" указал на возможность раскритиковать этот подход со стороны некоего также истинного утверждения (давайте не углубляться в детали атомарности... мне кажется, ситуация понятна - например, если я делал большой-большой апдейт, и он слетел на миллионной записи, я хочу повторить его с where id >= 1000000. Как я уже указал выше, мне нравится этот оракловый подход по сугубо статистическим причинам (нередко удобно, никогда не мешает). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 09:43 |
|
||
|
Циклы и IF'ы в Oracle по сравнению с MS SQL
|
|||
|---|---|---|---|
|
#18+
StXКонтрпример - PostgreSQL, чистый версионник. За очень малым исключением (создание/удаление базы, tablespace и сборки мусора) DDL в транзакции допустим и работает абсолютно корректно. Почему орден св.Оракла это запрещает? Коллега Yo отчасти горячится, но в его словах есть доля истины. Давайте я выдам одно очевидное соображение, а вы уж решайте, что есть чистый версионник и корректная работа. Утверждение: корректный внутритранзакционный DDL возможен только при serializable изоляции в жестком смысле этого слова (в том самом, в котором в Oracle вообще нет serializable) Обосновать это очень просто: представьте себе, что я делаю в транзакции некоторое изменение структуры таблицы, несовместимое со старой. Скажем, alter table drop column или alter table add foreign key. Далее в той же транзакции я делаю запрос к модифицированной таблице и как-то использую полученные данные. Проблема в том, что при любом уровне ниже serializable я при этом должен получить записи, параллельно вставленные другими транзакциями в старую версию структуры. Это выливается в проблемы либо на физическом уровне - то самое нет колонки, несовпадение форматов - либо, что куда страшнее, на логическом (новая логика захавала неконвертированные старые данные, нарушена целостность). Теперь давайте подумаем, что есть serializable в этом случае. На самом деле это ни что иное как эксклюзивная блокировка таблицы или иного крупного объекта (да еще и возможно с растущими из него). То есть решить эту задачу мы можем только блокировкой в худшем неверсионном стиле. Прошу прощения, я не спал ночь, может завтра подумаю получше и решу, что неправ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 10:06 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=35234171&tid=1553133]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 370ms |

| 0 / 0 |
