Firebird SQL: StoredProc возвращает нулевое значение вместо назначенных значений - PullRequest
0 голосов
/ 30 сентября 2011

У меня Firebird StoredProc запускается из триггера перед вставкой и перед обновлением, а также возвращает 3 значения. Эти 3 значения обновляют 3 поля непосредственно в одной таблице

Я поставил проверку в начале SP, если проверка верна, я хочу пропустить этот SP, поэтому я использовал «suspend» и «Exit», но когда я это сделал, я обнаружил, что обновления 3 полей имеют нулевое значение. почему это?

Триггер:

CREATE OR ALTER trigger trig1 for table1
active before insert or update position 2
AS
begin
  execute procedure my_proc1 new.f1, new.f2
  RETURNING_VALUES new.f3, new.f4, new.f5;
end

StoredProc (он очень большой ставлю только первые строки):

begin
  if (COALESCE(Param1,0) = 1) then begin
    output1 = 0;
    output2 = 0;
    output3 = 0;

    exit;
  end

Даже если я удалил блок IF и сохранил все остальное, я не получаю нули в 3 полях, кроме NULL !!!. Пожалуйста, сообщите

Спасибо

1 Ответ

1 голос
/ 30 сентября 2011

Поскольку вы недостаточно опубликовали хранимую процедуру, трудно сказать, но похоже, что вы смешиваете выбираемые и исполняемые процедуры, что не рекомендуется.То есть, если вы звоните SP через EXECUTE PROCEDURE, у вас не должно быть SUSPEND, если оно у вас есть, то звоните через SELECT ... FROM SP.FireBird более строг в этом отношении в последних версиях, хотя я думаю, что он не вызовет исключений, если вы используете «неправильный механизм вызова» ...

В любом случае, если вы вызываете EXIT в выбираемом SP, тогдаSQLCODE до 100 (конец потока записи), поэтому он не устанавливает выходные значения.Поэтому я предлагаю вам «очистить» ваш SP, либо сделать его выбираемым (иметь SUSPEND в местах, где вы хотите вернуть значения и вызывать его с помощью оператора SELECT), либо сделать его исполняемым (избавиться от SUSPEND)заявления в нем и вызвать его через EXECUTE).

...