|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
1. Ожидаемый результат Код: sql 1. 2. 3. 4. 5.
RESULT = 2. Неожиданный результат Код: sql 1. 2. 3. 4. 5.
RESULT = 0 3. Проверка - ожидаемый результат Код: sql 1. 2. 3. 4. 5.
RESULT = Непонятна ситуация 2: если select into вернул пустой набор данных, переменная, указанная в into , вообще "не трогается", в ней остается прежнее значение. Определенную логику в таком поведении увидеть можно, однако интуитивно по синтаксису ожидается, что после выполнения оператора значение переменной обновится. Как в операторе присваивания: странно было бы написать RESULT=xxx() и остаться при старом значении, потому что xxx ничего не вернул. Как тогда узнать, вернул или не вернул? Не вернул, и мы видим старое значение, или вернул, и мы имеем новое значение, случайно совпадающее со старым? Так вот вопрос: такое поведение - это стандарт SQL, особенность Firebird или ошибка? Firebird 3.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 00:00 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
shalamyansky, Если запрос не вернул данных, то соответственно и в переменную ничего не записалось. Ошибки нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 00:30 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
shalamyanskyКак тогда узнать, вернул или не вернул? Не вернул, и мы видим старое значение, или вернул, и мы имеем новое значение, случайно совпадающее со старым?Узнать можно с помощью конструкции Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 00:47 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
shalamyansky, где SUSPEND потерял? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 09:12 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
shalamyansky 2. Неожиданный результат create or alter procedure "_TEST_PROC" returns ( RESULT integer ) as begin RESULT = 0; select NULL from RDB$DATABASE where FALSE into :RESULT; end Ничего неожиданного. Селект не выполняется, а значит и переменная не перезаписывается. Так понятнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 10:20 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
rdb_devshalamyansky, где SUSPEND потерял?он и не планировался ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 10:23 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Я кстати согласен, что момент не очевидный. И желательно его явно в документации прописать. Одно дело "for select" - цикл он и есть цикл, внутри себя на каждый из 0,1,2,3,.... шагов ставит свои значения переменных. Нет лданных - цикл просто не выполнится. А когда без цикла, то это интуитивно очень похоже на "VarName = (select .....)" Получаются два возможных поведения, и они ОБА по своему логичны. Можно только зазубрить какая из логик выполняется. Но если "в первый раз" - то твердойпочвы нет, чтобы сказать "так и только так может быть". PS. что впрочем не мешает за пару минут взять и проверить PPS. https://firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-dml-select.html#fblangref25-dml-select-into "in PSQL if it returns at most one row, i.e., if it is a singleton select." насколько понимаю, синглтон - это не когад "at most", а когда ровно один объект (одна строка) IF SINGULAR( SELECT .... ) на пустом селекте будут FALSE В любом случае, в документации не описано, как будет себя вести SELECT INTO на пустмо запросе. Кроме того, в разделе про PSQL нет ни слова про SELECT ... INTO, хотя бы даже просто пары слов, что в PSQL режиме у операторов таких-то появляются такие-то новые возможности, о которых можно прочитать в разделе про DML. Хотя лично я бы вообще документацию про INTO-блок целиком перенес в PSQL раздел, а в DML-разделе оставил бы только упоминание о ней, чтобы было видно в каком месте этот блок вставляется. Но это уже вкусовщина ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:08 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
AriochИ желательно его явно в документации прописать. ... В любом случае, в документации не описано, как ... Кто-то конкретный должен для тебя это сделать? Представь свою версию документации, мы проголосуем и может вставим в общую. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:17 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch, по моему, поведение вполне очевидно и логично. Если, к примеру, подобный запрос внутри FOR возвращает строки, то FOR выполняет DO, если не возвращает - не выполняет. Так и здесь! Есть строка - помещаем результат в переменные, перечисленные в INTO, нет строки - не помещаем (нечего помещать). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:19 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
rdb_devArioch, по моему, поведение вполне очевидно и логично Поведение привычно. Иногда привычно и очевидно путают. Для нового человека тут два варианта одинаково очевидных поведений. rdb_devЕсли, к примеру, подобный запрос внутри FOR возвращает строки А "если к примеру, подобный запрос внутри скобок VarName=(select...) возвращает" ноль строк, что тогда ? Этот пример гораздо ближе к вопросу, чем цикл, которого в вопросе не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:22 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
WildSery, да можете вообще баг-трекер закрыть и принимать только готовые патчи с исправлениями, и ни на каплю меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:23 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
и в оракле и в мсскл всё точно так же. обсуждать нечего. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:25 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
rdb_devArioch, по моему, поведение вполне очевидно и логично... Если люди путаются, ожидая другого поведения, значит ты неправ. Не очевидно, то есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:33 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Мимопроходящийи в оракле и в мсскл всё точно так же. обсуждать нечего. Иногда люди в FB не с оракла или мсскл приходят, а с улицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:34 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch, Можно форум закрыть, и в полярную экспедицию отправиться. N.B. Кстати, в документации к Postgre, там, где into не табличный, явно написано, что into :var присваивает null, если выборка пустая. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:42 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
У кого стандарт SQL под рукой есть? Там в SELECT INTO что-то сказано по поводу пустых запросов? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:43 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
31.01.2018 14:34, чччД пишет: > Иногда люди в FB не с оракла или мсскл приходят, а с улицы иногда и сантехники "работают" гинекологами https://ria.ru/society/20180119/1512870383.html Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:47 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
31.01.2018 14:42, WildSery пишет: > в документации к Postgre, там, где into не табличный, явно написано, что *into :var* присваивает null, если выборка пустая. у них документация к параллельной реальности. (не всегда соответствует реалиям) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:48 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Мимопроходящийи в оракле и в мсскл всё точно так же.Oracle кидает исключение, насколько я помню ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:53 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
31.01.2018 14:53, hvlad пишет: > Oracle кидает исключение, насколько я помню NO_DATA_FOUND но результат от этого всё одно не меняется. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 14:58 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
В документации фраза есть: Стр. 295Простой оператор SELECT может быть использован в PSQL, только если он возвращает единственную строку, то есть, если это запрос типа синглтон (singleton). Может, исправить на: Простой оператор SELECT может быть использован в PSQL, только если он возвращает не более одной строки. В случае, когда запрос не возвращает данных (ноль строк), значение переменных <variable-list> в списке INTO <variable-list> не изменяется. ? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 15:17 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Мимопроходящий31.01.2018 14:53, hvlad пишет: > Oracle кидает исключение, насколько я помню NO_DATA_FOUND но результат от этого всё одно не меняется.Есс-но. Я просто уточнил фразу про "всё точно так же" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 15:28 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
чччДМожет, исправить на:В русской документации ошибка перевода. В доке ясно написано "A “plain” SELECT statement can only be used in PSQL if it returns at most one row, i.e., if it is a singleton select." "Не более одной строки". ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 15:38 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
WildSeryчччДМожет, исправить на:В русской документации ошибка перевода. В доке ясно написано "A “plain” SELECT statement can only be used in PSQL if it returns at most one row, i.e., if it is a singleton select." "Не более одной строки". Тем более есть смысл исправить. И по поводу случая, "когда ноль строк" - можно пару слов добавить? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 15:51 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
WildSeryВ русской документации ошибка перевода. В доке ясно написано какого, нафиг, перевода? русский LR первичен, английский - перевод с русского. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 16:55 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
kdv, ну значит там разобрались что я имел ввиду и поправили ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 17:02 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Симонов Денис, ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 17:03 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
kdv> какого, нафиг, перевода? русский LR первичен :) Русский LR (может, не конечный, но его куски и более ранние LR) были как раз переводами с английских LRU. В любом случае, надо о контенте думать, а не кто у кого перевёл неверно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 17:04 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, не могло быть этого в LRU, ибо эта часть в FB не менялась ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 17:06 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
shalamyansky, я не знаю, где у вас "интуитивно по синтаксису ожидается". Тут уже отписались на эту тему, но я добавлю объяснение if a = 5 then b:=10; если a = 4 - что будет в переменной b? Вот тут абсолютно так же - если записей не было, то ничего и не присваивается переменной. p.s. да, в доке, в разделе INTO, это должно быть написано, потому что этот вопрос реально задолбал. И я у себя про него отписывал - раздел "обработка данных..." в http://www.ibase.ru/sp_call/ ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 17:07 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Симонов Денис> не могло быть этого в LRU, ибо эта часть в FB не менялась Именно этот абзац - ХЗ. Аналогичные куски текста есть, например, в описании ES и если вы не пользуетесь копипастом (ручным или профессиональным в соотв. ПО) - то делаете что-то не так. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 17:29 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, ну ES то был сделан в Firebird, а SELECT в процедурах со времён IB ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 17:46 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Симонов Денис> ну ES то был сделан в Firebird, а SELECT в процедурах со времён IB И именно поэтому он есть в LRU и поведение синглтона в обоих случаях идентично (по крайней мере, в обсуждаемом контексте). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 18:07 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, исправлю ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 18:15 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
WildSeryКстати, в документации к Postgre, там, где into не табличный, явно написано, что into :var присваивает null, если выборка пустая. Какие жалкие людишки копаются в этом постгрессе. Нет чтобы обозвать пользователей дураками и лентяями и послать их на три полярные экспедиции ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 18:20 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
чччДВ документации фраза есть: Стр. 295Простой оператор SELECT может быть использован в PSQL, только если он возвращает единственную строку, то есть, если это запрос типа синглтон (singleton). Тут просто складывают яблоки с апельсинами. На самом деле есть ДВА способа использовать бесцикловый SELECT внутри PSQL, и у них вообще говоря возможно разное поведение при "особых случаях". Я два раза уже называл эти разные способы выше Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
А вообще, действительно интересно, что *по стандарту* должно возвращать выражение "(select ....)" если записей нет вообще - NULL или ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 18:38 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
kdvif a = 5 then b:=10; если a = 4 - что будет в переменной b? Вот тут абсолютно так же Да нет тут никакого "абсолютно так же". Нету у топикстартера ни цикла, не ветвления, НЕ-ТУ. Разговор примерно такой: - Если я зимой на бетон уроню банку с бензином - он загорится? - Что будет, если ты уронишь в банку с бензином тлеющий окурок, а потом выронишь саму банку? Загорится? Ну вот в твоей случае "абсолютно так же" (С) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 18:42 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch, Тут случай, когда select используется с into, так что ты э... гонишь. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 18:47 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
WildSeryУ кого стандарт SQL под рукой есть? Там в SELECT INTO что-то сказано по поводу пустых запросов? В стандарте INTO вообще в другом месте ставится Но поведение FB в связи с INTO вроде бы правильное, если потмо в стандарте ничего не поменяли ISO/IEC 9075-2:1999 (E) 14.5 <select statement: single row> Data manipulation p.665 ...... Format <select statement: single row> ::= SELECT [ <set quantifier> ] <select list> INTO <select target list> <table expression> ..... <table expression> ::= <from clause> [ <where clause> ] [ <group by clause> ] [ <having clause> ] ....... a) If the cardinality of Q is greater than 1 (one), then an exception condition is raised: car- dinality violation. It is implementation-dependent whether or not SQL-data values are assigned to the targets identified by the <select target list>. b) If Q is empty, then no SQL-data values are assigned to any targets identified by the <select target list>, and a completion condition is raised: no data. c) Otherwise, values in the row of Q are assigned to their corresponding targets ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 18:49 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
чччДТут случай, когда select используется с into, так что ты э... гонишь. :) и что, там от этого цикл вырос? не вырос. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 18:50 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch... a) If the cardinality of Q is greater than 1 (one), then an exception condition is raised: car- dinality violation. It is implementation-dependent whether or not SQL-data values are assigned to the targets identified by the <select target list>. b) If Q is empty, then no SQL-data values are assigned to any targets identified by the <select target list>, and a completion condition is raised: no data. c) Otherwise, values in the row of Q are assigned to their corresponding targets Т.е., поведение правильное, лишь отразить в доке сие требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:13 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
AriochДа нет тут никакого "абсолютно так же". Нету у топикстартера ни цикла, не ветвления, НЕ-ТУ. ну как нету. если_есть_результат то присвоить_значение_переменной Соответственно, когда результата_нет , ничего не присваивается. AriochНет чтобы обозвать пользователей дураками и лентяями и послать их на три полярные экспедиции я не понимаю, чего ты хочешь. Симонов уже сказал, что документацию поправит. Что еще? AriochЯ два раза уже называл эти разные способы выше я не вижу разницы в этих способах. Нет результата - ничего не присваивается. Есть результат - присваивается. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:22 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
чччД, угу. Также и с выражениями вроде бы корректно (хотя я бы распял рас шесть тех, кто стандарт писал. Это явно аннунаки с другой галактики были, найти в нём что-то не вывихнув остатки черепа.... Ну да ладно, пустое). Но в доке тоже надо отобразить. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Первое вернёт NULL, а второе - 10. SQL 1999-2 2) Let SS be a <scalar subquery>. Case: a) If the cardinality of SS is greater than 1 (one), then an exception condition is raised: cardi- nality violation. b) If the cardinality of SS is 0 (zero), then the value of the <scalar subquery> is the null value . c) Otherwise, let C be the column of <query expression> simply contained in SS. The value of SS is the value of C in the unique row of the result of the <scalar subquery>. Query expressions p.283 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:36 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
WildSery > У кого стандарт SQL под рукой есть? Там в SELECT INTO WildSery > что-то сказано по поводу пустых запросов? Сказано, что ничего не присваивать (и соотв. не делать опуствующие присвоению действия) и не рейзить ошибку. Arioch> А вообще, действительно интересно, что *по стандарту* должно возвращать Arioch> выражение "(select ....)" если записей нет вообще - NULL или ошибку. Null, конечно. If a <value expression primary> is a <scalar subquery> and the result of the <subquery> is empty, then the result of the <value expression primary> is the null value. Arioch> и что, там от этого цикл вырос? не вырос. Ты не заметил, что кроме тебя про циклы вообще никто даже не заикался? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:37 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch, это же очевидно. Не надо путать тёплое с мягким ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:37 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
kdvя не вижу разницы в этих способах. Нет результата - ничего не присваивается. Есть результат - присваивается. А стандарт - видит. И сам firebird тожt видит Если результата нету - то присваивается NULL В одном из случаев. И если даже ты не можешь навскидку вспомнить правильное по стандарту поведение, странно это ожидать от чайников. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:38 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
kdv> я не вижу разницы в этих способах. kdv> Нет результата - ничего не присваивается. kdv> Есть результат - присваивается. Нифига себе заявление! Дим, пожуй чего-нибудь, подумай ещё пару раз... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:38 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамТы не заметил, что кроме тебя про циклы вообще никто даже не заикался? Иногда лучше жевать, чем.... ...чем торопиться, скажем вежливо. rdb_devЕсли, к примеру, подобный запрос внутри FOR возвращает строки ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:39 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch> Но в доке тоже надо отобразить. Что именно? Конкретный пример туда перетащить? Или, может, весь стандарт перевести и туда втюхать? :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:40 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Симонов Денисэто же очевидно. Не надо путать тёплое с мягким Нет. Это - всего лишь привычно, и ни в коем случае не очевидно. Это даже KDV как оказалось не очевидно. Зато все тут обронзовели и с "тупыми юзерами" только через губу могут общаться ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:41 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, Может быть и весь стандарт. Потмоу что Language Reference это в том числе и БЕСПЛАТНОЕ изложение части стандарта, который сам по себе стоит больших денег. И изложение на нормальном понятном языке, а не на языке аннунаков. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:43 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch> Иногда лучше жевать, чем.... > ...чем торопиться, скажем вежливо. > rdb_dev > Если, к примеру, подобный запрос внутри FOR возвращает строки Виноват, не ты один такой болезный... Хотя даже он про For сказал после тоих "циклов". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:43 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch> Может быть и весь стандарт. Предлагаю проголусувать. Чё мелочиться-то... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:44 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамАналогичные куски текста есть, например, в описании ES и если вы не пользуетесь копипастом (ручным или профессиональным в соотв. ПО) - то делаете что-то не так. а на ES какая лицензия, кому копирайт принадлежит ? Copyright 1999 Inprise/Borland. All rights reserved. All InterBase products are trademarks or registered trademarks of Inprise/Borland. All Borland products are trademarks or registered trademarks of Inprise/Borland. Other brand and product names are trademarks or registered trademarks of their respective holders. 1INT0055WW21000 6E1R0699 раз копипаст, два копипаст - и как бы за распространение вареза не штрафанули, Эмбаркадере деньги сейчас нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:50 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
AriochПотмоу что Language Reference это в том числе и БЕСПЛАТНОЕ изложение части стандарта, чушь. Совпадение со стандартом будет только в том случае, если так ведёт себя Firebird. Если поведение отличается от стандартного, то оно будет описано. И никто SQL стандарт туда тащить не будет. И ещё между присвоением и into есть огромная разница. Как это может быть не очевидно я не понимаю. Нельзя выполнить присвоение переменной, не изменив её ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:53 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch> а на ES какая лицензия, кому копирайт принадлежит ? ES - это execute statement. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:58 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Симонов ДенисНельзя выполнить присвоение переменной, не изменив её Написали бы в стандарте, что "переменной присваивается ее текущее начение" - и присваивали не изменив бы как миленькие. А если бы в стандарте про SELECT INTO написали, что присваивается NULL, то и там бы присваивали, а не пропускали. Путать очевидное всем и привычное лично тебе, увы свойственно всем людям. Даже когда к тебе лично приходят люди, которым не очевидно, все равно прощё их записать в недочеловеки и остаться при своём. И получить удовольствие послав пользователей через губу идти покупать стандарты. Всё, надоело. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:58 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Симонов Денис> И никто SQL стандарт туда тащить не будет. Ну всё, не судьба. Даже проголусувать не надо (а мне было интересно на результаты посмотреть). > Как это может быть не очевидно я не понимаю. Как выяснилось, даже Дима путается. Хотя к чему сюда скалярный вариант вообще приплели непонятно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 19:59 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Arioch> и присваивали не изменив бы как миленькие. Не факт. И это имело бы другие сопутствующие... "нюансы", которые нужно было бы знать, и, вероятно, описывать в доке. > прощё их записать в недочеловеки и остаться при своём. > И получить удовольствие послав пользователей через губу Уймись уже, подобной фигнёй тут только ты страдаешь. ТС спросил, ему первым постом объяснили "почему", вторым постом объяснили "как". А потом пришёл ты поручик Ржевский и тут такооооое началось... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 20:05 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, да Дима просто не пользуется таким присвоением. Я тоже, хотя знаю, что так можно ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 20:17 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Дык и я не пользуюсь (не столько потому что не нравится, сколько потому что одинарный скаляр редко нужен бывает, чаще строковый скаляр). Перепутал, бывает. Это из разряда случаев, когда люди gen_id и контекстные переменные напрямую не умеют вызывать. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 20:28 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
AriochЕсли результата нету - то присваивается NULL В одном из случаев. значит, null при i=(select ....) - это баг. Никогда так не писал, поэтому не сталкивался. Рустаму, про "правильно" - null это все равно результат. А если результата нет, значит и присваивать нечего. Если непонятно, поясняю: i=(select field from table); означает "записать в переменную I значение столбца field из выбранной записи". Вообще для select результатом является набор записей (множество). Если множество пустое, как можно что-то записывать в i ? Столбца field в данном случае вообще не существует. Теоретически это могло бы быть темой для дискуссии. Но поскольку я не вижу здесь смысловой разницы между i=(select) и select into :i - считаю что и работать они должны одинаково, т.е. ничего не менять в переменной, если rowset is empty. А по существу - надо посмотреть, как эти конструкции выглядят в blr, и в чем там разница. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 20:57 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Симонов ДенисНельзя выполнить присвоение переменной, не изменив еe тоже логично. Но в случае отсутсвия rowset вся конструкция i=(select); превращается в i=; и все. Должна-ли такая конструкция работать эквивалентно явному i=null; ? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 21:01 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
kdvв случае отсутсвия rowsetесть чёткое правило в стандарте, выше приводилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 21:02 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамНу всё, не судьба. Даже проголусувать не надо (а мне было интересно на результаты посмотреть). тут хоть обголосуйся, но написание документации - работа платная. Так что пока ее бесплатно писать никто не хочет или не умеет, голосуйте хоть за втыкание трех стандартов в документацию, результат будет одинаков - шиш с маслом. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 21:03 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
hvladесть чёткое правило в стандарте, выше приводилось. тогда я не знаю, что еще обсуждать. А то все такие говорливые стали, прямо прорвало. В документации будет дополнено? Будет. Вот и славно (трам-пам-пам). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 21:05 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
kdv> Рустаму, про "правильно" - null это все равно результат. kdv> А если результата нет, значит и присваивать нечего. Даже если забыть про стандарт, то отсутствие результата - тоже результат и странно хотеть оператор присваивания, который ничего не присваивает и не выдаёт ошибку. > Вообще для select результатом является набор записей (множество). > Если множество пустое, как можно что-то записывать в i ? Не для скалярного. Для скалярного чётко расписано, что делать в случае 0, что в случае 1 и что в случае > 1. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 21:08 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
kdv> тут хоть обголосуйся Не-не, мне таки интересно было бы на голосующих посмотреть. В список занести. (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 21:10 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
kdvWildSeryВ русской документации ошибка перевода. В доке ясно написано какого, нафиг, перевода? русский LR первичен, английский - перевод с русского.Тот случай, когда перевод лучше оригинала? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2018, 23:38 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Ariochkdvя не вижу разницы в этих способах. Нет результата - ничего не присваивается. Есть результат - присваивается. А стандарт - видит. И сам firebird тожt видит Если результата нету - то присваивается NULL В одном из случаев. И если даже ты не можешь навскидку вспомнить правильное по стандарту поведение, странно это ожидать от чайников. Ты закусывай иногда. Хотя бы в одном из случаев. Положить в переменную что достал, не достал, не лОжь зеркальце в парту (С) - это стандарт и это логично, а присвоить переменной что-то, неважно откуда взявшееся - это к SQL имеет весьма слабое отношение. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 00:40 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамArioch> Может быть и весь стандарт. Предлагаю проголусувать. Чё мелочиться-то... Ну. И на место Трампа выбрать этого... как его... А! Родченкова, вот! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 00:42 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Добавлю свои 5 копеек. То, что конструкция SELECT INTO не меняет значение переменных при пустом наборе - в принципе логично. Но не очевидно для человека. У нас все разработчики обязательно наступали на этот нюанс. Я и сейчас второпях иногда забываю про то, что при переделке кода с "A = (SELECT FROM XXX)" на "SELECT FROM XXX INTO :A, :B" переменные надо заранее обнулить. Поэтому отразить в доке такое поведение считаю правильным. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 02:29 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
CyberMaxSELECT INTO не меняет значение переменных при пустом наборе - в принципе логично. Но не очевидноА что, если б меняла - было бы очевиднее? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 03:23 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
CyberMax, Я бы даже попросил дополнительный предикат к into (типа reset). Чтобы обнулять в случае отсутствия результатов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 03:34 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
YuRockCyberMaxSELECT INTO не меняет значение переменных при пустом наборе - в принципе логично. Но не очевидноА что, если б меняла - было бы очевиднее? Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 03:57 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
CyberMaxYuRockпропущено... А что, если б меняла - было бы очевиднее? Да. А на что меняла, разрешите полюбопытствовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 10:33 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Никого же не смущает, что изначально переменные инициализированы как NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 10:47 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Кстати, никогда не задумывался, а чем начально инициализируется переменная DECLARE V1 INT NOT NULL ? Нулём? У меня щас под рукой FB нету проверить :( ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 10:49 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
WildSeryКстати, никогда не задумывался, а чем начально инициализируется переменная DECLARE V1 INT NOT NULL ? Нулём? У меня щас под рукой FB нету проверить :( По-моему исключение будет, если так и не инициализировать ее. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 10:54 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
WildSeryНикого же не смущает, что изначально переменные инициализированы как NULL.Не всегда. Или default-значением домена. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 10:55 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
YuRockWildSeryНикого же не смущает, что изначально переменные инициализированы как NULL.Не всегда. Или default-значением домена.Или default-значением при определении переменной. Я же не об этом пишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 10:59 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
WildSeryКстати, никогда не задумывался, а чем начально инициализируется переменная DECLARE V1 INT NOT NULL ? Нулём? У меня щас под рукой FB нету проверить :( У меня нет под рукой FB, допускающего расширенный синтаксис декларирования переменных, но чисто по логике вещей, если бы я эту фичу делал, я бы отсёк такую конструкцию на уровне синтаксиса. Ибо она противоречива по определению. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 16:32 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка, Код: sql 1. 2. 3. 4. 5. 6. 7.
Нет ошибки. Но Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 16:40 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Старый плюшевый мишкаWildSeryКстати, никогда не задумывался, а чем начально инициализируется переменная DECLARE V1 INT NOT NULL ? Нулём? У меня щас под рукой FB нету проверить :( У меня нет под рукой FB, допускающего расширенный синтаксис декларирования переменных, но чисто по логике вещей, если бы я эту фичу делал, я бы отсёк такую конструкцию на уровне синтаксиса. Ибо она противоречива по определению. Проверил. Такая фича разрешена, и я считаю это логичным, ведь можно же объявлять переменные по домену, который может быть с ограничением NOT NULL. Работает так (ИМХО): - инициализируется NULL-ом; - если к переменной до [корректной] инициализации не было обращений (или вообще не было обращений) - всё ок; - если произошло обращение, а она всё еще NULL - исключение validation error value ***null***. Проверял на 3.0.2, но в 2.1 тоже так был, насколько я помню. Пример: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Компилится, при Код: sql 1.
выдается иключение если не закомментить строку "OUT_ID = ID" ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 16:50 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
Мда, не успел... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 16:51 |
|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#18+
hvladСтарый плюшевый мишка, Нет ошибки. Но Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Lazy initialization ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2018, 02:24 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561254]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
104ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 203ms |
0 / 0 |