|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
hi all Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Так должна ли вспыхивать ошибка или нет в случае выборки nullif(null, 0) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2012, 21:34 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
Согласно SQL-92 (не уверен насчет последующих версий): NULLIF (V1, V2) is equivalent to the following <case specification>: CASE WHEN V1=V2 THEN NULL ELSE V1 END Т.е. CASE WHEN NULL=0 THEN NULL ELSE NULL END, теоретически не должно вызывать ошибок. Ораклу нужны видимо явные преобразования - NULLIF(TO_NUMBER(NULL),0), а МС судя по ошибке вообще не умеет NULL в case-выражении возвращать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2012, 22:26 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
thehilОраклу нужны видимо явные преобразования - NULLIF(TO_NUMBER(NULL),0)to_number не взлетел, пришлось через cast. Кроме того, сработала "явная формула", которую вы привели: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Код: plaintext
и не пропёрло с остальными: Код: plaintext 1. 2. 3. 4. 5. 6.
В общем, странновато как-то. На таком простом выражении и его вариациях три СУБД дают разные результаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2012, 23:48 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
Таблоидhi all Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Так должна ли вспыхивать ошибка или нет в случае выборки nullif(null, 0) ? А почитать, что написано в документации по этой функции, не позволяют религиозные убеждения? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 00:07 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
sphinx_mvА почитать, что написано в документации по этой функции, не позволяют религиозные убеждения?А сам-то читал ? Здесь , например, ничего нет Зато есть здесь ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 01:46 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
sphinx_mvА почитать, что написано в документации по этой функции, не позволяют религиозные убеждения?как-то жаль тратить время на такие очевидные вещи, как nullif, coalesce и т.д. Они ведь с царя гороха в SQL-стандарте, применяются повсеместно. Может, еще и арифметику проверять следует на каждом выражении ? Ну да, прочёл я это: http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions107.htm#SQLRF00681 http://msdn.microsoft.com/en-us/library/ms177562%28SQL.100%29.aspx Оракл прямо говорит, что юзать литерал `null` нельзя (не объясняя причины), а МС СКЛ - ничего не говорит. Ждёт, когда применят, чтобы шваброй стукнуть :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 02:07 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
ТаблоидНу да, прочёл я это: http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions107.htm#SQLRF00681 http://msdn.microsoft.com/en-us/library/ms177562%28SQL.100%29.aspx Оракл прямо говорит, что юзать литерал `null` нельзя (не объясняя причины), а МС СКЛ - ничего не говорит. Ждёт, когда применят, чтобы шваброй стукнуть :-) Я не знаю, кого и куда нужно стукнуть, но для MSSQL указано - возвращаемый результат функции имеет тип данных первого аргумента. Для Oracle указано, что оба аргумента должны быть одинакового типа. А теперь просто задаем себе вопрос - какой тип данных у литерала NULL? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 12:02 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
> как-то жаль тратить время на такие очевидные вещи, как nullif, coalesce и т.д. > Они ведь с царя гороха в SQL-стандарте, применяются повсеместно. nullif нестандартный. Пиши везде CASE-выражения, и всё будет переносимо, они стандартные. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 12:38 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
sphinx_mvА теперь просто задаем себе вопрос - какой тип данных у литерала NULL?И каким образом это связано с сообщение об ошибке ? Не вижу смысла упираться - в MS признали, что сообщение кривое и изменили его (не могу сказать, что оно стало лучше :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 12:49 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
MasterZivnullif нестандартныйГм. А может таки почитать стандарт ? Параграф 6.11 <case expression> ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 12:51 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
hvladsphinx_mvА теперь просто задаем себе вопрос - какой тип данных у литерала NULL?И каким образом это связано с сообщение об ошибке ? Ну, как бы сказать... Привести два аргумента к типу, к которому ничего не приводится, и сравнить что-то, что в принципе не особо можно с чем-либо сравнить - это надо постараться... hvladНе вижу смысла упираться - в MS признали, что сообщение кривое и изменили его (не могу сказать, что оно стало лучше :)) Хотя бы одна из веток в CASE должна вернуть не-NULL результат - вполне отражает суть имеющей место проблемы. Соответственно, что не так в сообщении об ошибке - не совсем понятно... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 14:03 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
Таблоид , СУБД Caché 2012.2.FT3select nullif(null,0) f01 select nullif(to_number(null),0) f01 select nullif(cast(null as numeric),0) f01Результат одинаков для всех трёх запросов:f01null NULLIF PS: думаю, дело в поддержке неявных преобразований типов. Например:select '3 яблока' + '4 груши' f01Результат:f017 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 14:42 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
On 05/20/2012 01:51 PM, hvlad wrote: > nullif нестандартный > > Гм. А может таки почитать стандарт ? Параграф 6.11 <case expression> ОК, может это в стандарте и ЕСТЬ. Только всем на это плевать, ораклу в первую очередь. А CASE все поддерживают. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 15:16 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
sphinx_mv, еще раз - сообщение об ошибке никак не помогает понять её суть. Это признано даже в МС, так что не надо с этим спорить. Это уже даже не забавно, а просто глупо. Далее. Новое сообщение To: At least one of the result expressions in a CASE specification must be an expression other than the NULL constant.никак не связано с ф-цией NULLIF, поэтому не менее кривое чем первое. Можно с большой долей уверенности говорить о том, что средний пользователь MSSQL понятия не имеет не только о том, что NULLIF есть частный случай CASE, но и не скажет где находится result expression в CASE specification :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 15:49 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
MasterZivОК, может это в стандарте и ЕСТЬ. Только всем на это плевать, ораклу в первую очередь.Не нужно рассказывать о [не]стандартности той или иной фичи, если сам стандарта в глаза не видел. Причём тут оракл (в котором давно есть NULLIF) - я не понял. Объяснять не нужно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 15:52 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
On 05/20/2012 04:52 PM, hvlad wrote: > ОК, может это в стандарте и ЕСТЬ. Только всем на это плевать, ораклу в первую > очередь. > > Не нужно рассказывать о [не]стандартности той или иной фичи, если сам стандарта > в глаза не видел. > > Причём тут оракл (в котором давно есть NULLIF) - я не понял. О, спасибо! ТЫ разскрыл мне глаза на правду! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 16:07 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
servitдумаю, дело в поддержке неявных преобразований типов. select '3 яблока' + '4 груши' f01 Результат: 7 это древняя фишка языка MUMPS. Грубо говоря, там чисел вообще нет, одни строки. И также означает, что в Cache кривой sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 19:12 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
kdvэто древняя фишка языка MUMPS Фишкой было бы, если бы результат был "7 фруктов". А так это обычный баг парсера, который игнорит хвост литерала. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 20:33 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
kdvэто древняя фишка языка MUMPS. Грубо говоря, там чисел вообще нет, одни строки. И также означает, что в Cache кривой sql.В качестве примера был приведён SQL-запрос, а не код на MUMPS: Типы данных в SQL Dimitry SibiryakovФишкой было бы, если бы результат был "7 фруктов". А так это обычный баг парсера, который игнорит хвост литерала.Это не баг, а неявное приведение типов. Например:select '3.3 яблока' + '4.1e2 груш' as f01Результат:f01413.3select '3.3 яблока' || '4.1e2 груш' as f01Результат:f013.3 яблока4.1e2 груш ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 21:45 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
servitВ качестве примера был приведён SQL-запрос, а не код на MUMPS Это не баг, а неявное приведение типов. не рассказывайте мне что такое Cache, MUMPS, ДИАМС, приведение типов, и т.п., я и сам знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2012, 21:51 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
sphinx_mvдля MSSQL указано - возвращаемый результат функции имеет тип данных первого аргумента.раз всё так просто и понятно, как объяснить, что в этом примере: Код: sql 1.
-- MS SQL уже выдаёт результат без ошибки ? Откуда он догадался, что безымянное поле производной таблицы `t` имеет числовой тип ? (Oracle в аналогичном варианте "остается верен себе" и НЕ выводит результат, возвращая ORA-00932). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2012, 08:53 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
hvladДалее. Новое сообщение To: At least one of the result expressions in a CASE specification must be an expression other than the NULL constant.никак не связано с ф-цией NULLIF, поэтому не менее кривое чем первое.Сейчас появилась возможность проверить на MSSQL 2008 SP3, сообщение всё же человеческое : Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2012, 10:45 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
hvladсообщение всё же человеческое :<...> Код: sql 1.
Это сообщение не объясняет, каким образом MS SQL умудряется узнать тип ПЕРВОГО аргумента в NULLIF'e в предыдущем примере. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2012, 12:22 |
|
Что должно выдать select nullif(null, 0) [from dual / rdb$database / ...] ?
|
|||
---|---|---|---|
#18+
Таблоидsphinx_mvдля MSSQL указано - возвращаемый результат функции имеет тип данных первого аргумента.раз всё так просто и понятно, как объяснить, что в этом примере: Код: sql 1.
-- MS SQL уже выдаёт результат без ошибки ? Откуда он догадался, что безымянное поле производной таблицы `t` имеет числовой тип ? (Oracle в аналогичном варианте "остается верен себе" и НЕ выводит результат, возвращая ORA-00932). "Фича" MSSQL, однако... Тип данных колонки xxx в запросе вида select null as xxx - int... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2012, 13:42 |
|
|
start [/forum/topic.php?fid=35&msg=37802439&tid=1552550]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 146ms |
0 / 0 |