Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неожиданности select ... into в ХП / 25 сообщений из 41, страница 1 из 2
02.04.2006, 15:59:46
    #33639702
_avz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
Пользую FB уже пару лет, но только сейчас обнаружил такую вещь: если в результате выполнения select ... into ... под условие не попадает ни одной строки, в переменных из предложения into остаются те же значения, что были и до выполнения этого оператора, а не заносятся null-ы. (Из-за моего этого заблуждения одна сложная ХП работала неверно, только когда стал разбираться, понял в чем дело.) Поискал в доках, где описана эта особенность, но не нашел. Если не трудно, ткните в то место, где про это сказано.
...
Рейтинг: 0 / 0
02.04.2006, 16:14:58
    #33639712
_avz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
Да, забыл сказать: сервер FB 1.5.3.
...
Рейтинг: 0 / 0
02.04.2006, 17:14:46
    #33639752
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
Вообще-то поведение очевидное и предсказуемое. В BOL для M$ SQL это точно описано, а вот искать и распаковывать доку для Interbase мне лениво, ищи сам, думаю что это либо в синтаксисе SELECT'а описано, либо в разделе по ХП. В общем, пилите, Шура...
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.04.2006, 17:35:10
    #33639761
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
_avzПользую FB уже пару лет, но только сейчас обнаружил такую вещь: если в результате выполнения select ... into ... под условие не попадает ни одной строки, в переменных из предложения into остаются те же значения, что были и до выполнения этого оператора, а не заносятся null-ы.Так и должно быть и много раз говорилось: инициализируйте переменные перед циклом.
_avzПоискал в доках, где описана эта особенность, но не нашел. Если не трудно, ткните в то место, где про это сказано.В доках это явно может и не описано, но for select - это цикл. Соответственно если у тебя цикл (while к примеру) не срабатывает, то выполнение просто передается дальше - что ты и наблюдаешь.
...
Рейтинг: 0 / 0
02.04.2006, 17:38:21
    #33639766
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
пример примитивный:

if условие then
a:=5;

если условие = false, чему будет равно a? Правильно. Тому значению, которое до этого было в a.
...
Рейтинг: 0 / 0
02.04.2006, 17:49:52
    #33639772
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
Да уж... Совсем проще некуда объяснил...
...
Рейтинг: 0 / 0
02.04.2006, 19:56:09
    #33639855
Sexton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
Можно ли гарантировать, что при входе в триггер/процедуру переменные инициализируются в NULL?
...
Рейтинг: 0 / 0
02.04.2006, 20:09:42
    #33639870
_avz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
В моем случае (очень упрощенно) было так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
for select ...
  // ищем, была ли запись с таким id в таблице
   xxx_id = null;     --  оказывается это делать обязательно, иначе останется 
                         --  значение из предыдущего цикла
   select .... into :xxx_id;
   if (xxx_id is null) then
   begin
     ...
   end
   else begin
     ...
   end
  ...

Просто мне казалось очевидным, что если записи не найдется xxx_id будет null.
...
Рейтинг: 0 / 0
02.04.2006, 20:44:48
    #33639894
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
"Гаджимурадов Рустам" <nospam@sql.ru>; сообщил/сообщила в новостях следующее:
news:2515345@sql.ru...
....
> В доках это явно может и не описано, но for select - это цикл.
Соответственно если у тебя цикл (while к примеру) не срабатывает, то
выполнение просто передается дальше - что ты и наблюдаешь.

Не о "for select..." шла речь, а о простом "select into param_list ".
Если record_count = 0, то param_list не меняется.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.04.2006, 21:50:39
    #33639927
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
SextonМожно ли гарантировать, что при входе в триггер/процедуру переменные инициализируются в NULL?
В FB сервер это гарантирует.
...
Рейтинг: 0 / 0
02.04.2006, 21:51:35
    #33639929
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
mvНе о "for select..." шла речь, а о простом "select into param_list ".
Если record_count = 0, то param_list не меняется.
Я думал, что люди это выучивают на первом месяце работы с сервером :-)
...
Рейтинг: 0 / 0
03.04.2006, 00:32:35
    #33640022
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
dimitr mvНе о "for select..." шла речь, а о простом "select into param_list ".
Если record_count = 0, то param_list не меняется.
Я думал, что люди это выучивают на первом месяце работы с сервером :-)Надо бы прописать это в доку... Во избежание.
...
Рейтинг: 0 / 0
03.04.2006, 00:34:33
    #33640025
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
mv"Гаджимурадов Рустам" <nospam@sql.ru>; сообщил/сообщила в новостях следующее:
news:2515345@sql.ru...
....
> В доках это явно может и не описано, но for select - это цикл.
Соответственно если у тебя цикл (while к примеру) не срабатывает, то
выполнение просто передается дальше - что ты и наблюдаешь.

Не о "for select..." шла речь, а о простом "select into param_list ".
Если record_count = 0, то param_list не меняется.По большому счету "select into param_list" это тот же "for select" только выполняющийся один раз,
хотя как это реализовано в коде не знаю - пока ДЕ здесь пусть как раз и просветит.
...
Рейтинг: 0 / 0
03.04.2006, 07:29:26
    #33640105
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
именно так и реализовано. Цикл с ограничением сингулярности.
...
Рейтинг: 0 / 0
03.04.2006, 08:12:13
    #33640127
_avz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
dimitrЯ думал, что люди это выучивают на первом месяце работы с сервером :-)

Да, знаю, двойка мне за незнание очевидных (как оказалось) вещей.
Кстати, задумавшись, как же я раньше на это не наступил, стал смотреть код хранимок во всех своих разработанных базах. Самое смешное, что я везде в таких циклах инициализировал такие переменные null-ами, особо не задумываясь. А в последнем проекте, видать после полугодового перерыва, потерял эту привычку... Ладно, прощу прощения за идиотский вопрос.
...
Рейтинг: 0 / 0
03.04.2006, 08:27:49
    #33640143
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
_avzя везде в таких циклах инициализировал такие переменные null-ами

при возврате запросом NULLа это бы тебя не спасло.
...
Рейтинг: 0 / 0
03.04.2006, 08:47:41
    #33640158
_avz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
dimitr
при возврате запросом NULLа это бы тебя не спасло.
В основном речь идет о выборке вместе с ПК, а потом делается проверка переменной именно для ПК на is null. ПК null-ом быть не может, поэтому все нормально :-)
...
Рейтинг: 0 / 0
03.04.2006, 08:52:07
    #33640160
Sexton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
dimitr SextonМожно ли гарантировать, что при входе в триггер/процедуру переменные инициализируются в NULL?
В FB сервер это гарантирует.
Спасибо
...
Рейтинг: 0 / 0
03.04.2006, 09:04:24
    #33640172
_avz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
_avz dimitr
при возврате запросом NULLа это бы тебя не спасло.
В основном речь идет о выборке вместе с ПК, а потом делается проверка переменной именно для ПК на is null. ПК null-ом быть не может, поэтому все нормально :-)
Более корректное решение это проверять row_count на 0, правильно?
...
Рейтинг: 0 / 0
03.04.2006, 10:31:34
    #33640393
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
_avzПользую FB уже пару лет, но только сейчас обнаружил такую вещь: Мне повезло: я столкнулся с этим на первом месяце работы :)
Вообще-то ситуация такая же, как и в, скажем, Дельфи. Если переменной не задавать значение, оно остается прежним. И здесь: если селект не возвращает запись, в переменные никак нельзя записать нулл.
...
Рейтинг: 0 / 0
03.04.2006, 10:39:09
    #33640428
_spy_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
_avzБолее корректное решение это проверять row_count на 0, правильно?
При селектах row_count возвращает 0 насколько я знаю...
...
Рейтинг: 0 / 0
03.04.2006, 10:40:12
    #33640434
_spy_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
в смысле всегда 0, независимо от количества выбранных строк
...
Рейтинг: 0 / 0
03.04.2006, 10:47:33
    #33640450
FreemanZAV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
to _spy_
В 2-ке ни фига
...
Рейтинг: 0 / 0
03.04.2006, 10:57:25
    #33640490
_spy_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
FreemanZAVto _spy_
В 2-ке ни фига
Спасибо, буду знать, 2-ку еще не юзал.
P.S. Но у автора 1.5.3
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.02.2014, 12:48:34
    #38553157
Johnnyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданности select ... into в ХП
если в примерах выше переменная не обnull'яется
то вот новая неожиданность:

Код: plsql
1.
<перем> = (select ... from tabl1);



в переменную пишется null, если записи не найдены :)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неожиданности select ... into в ХП / 25 сообщений из 41, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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