Повторное использование переменной в процедуре

Сергей Боев
Дата: 24.05.2012 11:04:55
В процедуре interbase 5.6 такая последовательность
select no from sametable where (no=5555) into :tmpno;
/*такая запись существует и в переменную попадает 5555*/
if (tmpno IS NULL) then
begin
exception not_exist;
exit;
end
select no from sametable where (no=25555) into :tmpno;
/*такая запись не существует и в переменную попадает ? остается 5555 Я думаю должно быть NULL*/

Что не так?
Evgen2010
Дата: 24.05.2012 11:08:13
Сергей Боев,

Думаю, что перед каждым селектом нужно эту переменную "занулять" для верности.
Dimitry Sibiryakov
Дата: 24.05.2012 11:18:11

Сергей Боев
Я думаю должно быть NULL

Это ты неправильно думаешь.

Posted via ActualForum NNTP Server 1.5

kdv
Дата: 24.05.2012 11:53:19
if a = 5 then
 b:=10;


что будет в B, если a <> 5? null? с какого рожна? в переменной B будет то, что было записано в нее до выполнения этого куска кода.
rstrelba
Дата: 24.05.2012 12:16:25
kdv,
а как по мне то что-то вроде

b:=(результат некой операции), т.е. мы в b ожидаем что-то увидеть по-любому
Кому может понадобиться сохранить в b старое значение???
PS я все понимаю, стандарты, блаблабла
mvb
Дата: 24.05.2012 12:34:28
rstrelba,

начиная кажись с FB2.х это две разные операции:
     b = 0;

     select 1 from rdb$database where 1=2
      into :b;
     suspend;

     b = (select 1 from rdb$database where 1=2);
     suspend;

в первом случае присвоение будет при наличии записей, во втором - всегда.
kdv
Дата: 24.05.2012 12:59:42
rstrelba
b:=(результат некой операции), т.е. мы в b ожидаем что-то увидеть по-любому
Кому может понадобиться сохранить в b старое значение???
PS я все понимаю, стандарты, блаблабла

mvb правильно ответил. при select into есть три варианта
1. запись есть, со значением в столбце
2. запись есть, с null в столбце
3. записи нет

для случая 3 вообще ничего нет, значит и присваивать нечего. Если бы присваивался null, тогда невозможно было бы отличить от случая 2.