|
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=40&fpage=37&tid=1561254]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 310ms |
total: | 463ms |
0 / 0 |