как сохранить состояние последней функции в случае ошибки в postgreSQL - PullRequest
0 голосов
/ 02 октября 2018

объявить целое число V_OUTPUT;

begin V_OUTPUT: = function1 (data_rif);

V_OUTPUT: = function2 (data_rif);

V_OUTPUT: = function3 ((data_rif);

V_OUTPUT: = function4 (data_rif);

return V_OUTPUT;end;

Все функции возвращают 0, если они выполняются правильно.Таким образом, в конце переменная V_OUTPUT должна быть равна 0. Но если одна из функций выходит из строя, я хочу знать, какая из функций неправильная.Что вы порекомендуете?Я думал поставить прогрессивный счетчик и сохранить его в журнале спасибо

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Я забыл упомянуть, что функции являются последовательными.Таким образом, если промежуточная функция не выполняется, нет смысла выполнять другие.Я думал о том, чтобы поместить вложенные if, и каждый возвращает прогрессивное число, которое помогает мне понять, если что пошло не так.Как вы думаете?

 DECLARE
        V_OUTPUT integer;
    BEGIN
        V_OUTPUT := function1(data_rif);
        IF V_OUTPUT <> 0 THEN
          return 1
          ELSE
           V_OUTPUT := function2(data_rif);
           IF V_OUTPUT <> 0 THEN
              RETURN 2
             ELSE
             V_OUTPUT := function3(data_rif);
             IF V_OUTPUT <> 0 THEN
             RETURN 3
             ELSE
             V_OUTPUT := function4(data_rif);
             IF V_OUTPUT <> 0 THEN
              RETURN 4
              ELSE
              return 0;
             END IF;
            END IF;
          END IF;
        END IF;

    END;
0 голосов
/ 02 октября 2018

Либо используйте четыре переменные для перехвата возвращаемых значений, либо просто проверяйте наличие ошибок сразу после вызова функции и обрабатывайте там любые ошибки.Прямо сейчас вы перезаписываете возвращаемое значение предыдущего вызова.

DECLARE
    V_OUTPUT integer;
BEGIN
    V_OUTPUT := function1(data_rif);
    IF V_OUTPUT <> 0 THEN
      -- error handling for function 1
    END IF;

    V_OUTPUT := function2(data_rif);
    IF V_OUTPUT <> 0 THEN
      -- error handling for function 2
    END IF;

    V_OUTPUT := function3(data_rif);
    IF V_OUTPUT <> 0 THEN
      -- error handling for function 3
    END IF;

    V_OUTPUT := function4(data_rif);
    IF V_OUTPUT <> 0 THEN
      -- error handling for function 4
    END IF;

    return 0;
END;
...