Hello, Konstantin!

Константин wrote:
>   declare variable s smallint;     // 16 bit
>   begin
>      i = 1;
>      s = -65535;    // прокатывает хотя для bigint - нет (-65535..0)

вообще то smallint это знаковое, +- 32768.
может быть на этапе присвоения в процедуре это и прокатывает,
но не прокатит при выполнении или обработке параметров. Достаточно проверить 
так:
create procedure i
returns (s smallint)
as
begin
   s=60000;
   suspend;
end

при select * from i получим arithmetic exception.

 >Из всего выше перечисленного очень интерестная логика получается ...
 >  А точнее вообще не понятно нифига ...

Константин Григорьевич, кончай мутить. Есть стандартные типы,
целочисленные, знаковые. И любые отклонения от нормального
поведения надо считать багом. Но с попытками изменить "стандартность"
этих типов - в сад.
Тебе на bigint одного бита не хватило? Для ACL?

 >PS: Все эксперементы воспроизводились с использованием
 >    отладчика IBExpert пошагово ...

еще один.... IBExpert "отлаживает" процедуры путем выдирания из
текста процедуры отдельных операторов и выполнения просто как
операторов SQL. То есть, он делает это сам,
как можешь делать и ты, положив текст процедуры в notepad,
и выполняя из нее операторы поштучно.
В InterBase/Firebird нет никакой "отдладки процедур".

-- 
Dmitri Kuzmenko, www.ibase.ru, (495) 953-13-34


--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---

Ответить