Добрый вечер, всем.

Столкнулся со следующей проблемой: Если переменная в процедуре имеет
тип домена а домен имеет ограничение 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

С уважением,
Виктор Коршун.

Ответить