Добрый вечер, всем.
Столкнулся со следующей проблемой: Если переменная в процедуре имеет
тип домена а домен имеет ограничение NOT NULL и переменная не
инициализирована то при первом обращении к этой переменной имеем
сообщение об ошибке - The insert failed because a column definition
includes validation constraints.
validation error for variable VID, value "*** null ***".
Пример
CREATE DOMAIN TID INTEGER NOT NULL;
CREATE or ALTER PROCEDURE ptest2(apar integer) RETURNS (retval
integer)
AS
declare variable vid TID;
BEGIN
if (apar>0) then
vid = apar +1;
retval = coalesce(vid,0); /* или просто retval = vid; */
suspend;
END
Вызов select * from ptest2(0) - выдаст ошибку в строке с комментарием.
После запроса select * from ptest2(1) ошибка больше возникать не будет
т.е. select * from ptest2(0) будет возвращать 0( или null если без
coalesce) без сообщений об ошибке.
Другая процедура
CREATE or ALTER PROCEDURE ptest1(apar integer) RETURNS (retval TID)
AS
declare variable vid TID;
BEGIN
if (apar>0) then
vid = apar +1;
retval = vid;
suspend;
END
1) Первый вызов - ptest1(0) - ошибка в 7 - строке , vid- null;
2) ptest1(1) - все ок.
3) ptest1(0) - - ошибка в 7 - строке , только виноват retval- null,
что в принципе верно;
Получается очень важно инициализировать самому подобные переменные
особенно перед вызовом
SELECT * FROM table INTO :var где var типа домен. Иначе можно
наткнуться на непонятные ошибки
V - 2.5.0.26054 for Windows
С уважением,
Виктор Коршун.