PLSQL, как хранить ORA-06512 в какую-то переменную? - PullRequest
0 голосов
/ 27 марта 2019

Я использую flyway для переноса данных с использованием Jenkins.Я хочу включить и отключить триггеры, когда выполняется код исправления данных.Мне удалось обработать исключение, и моя функция триггеров enable disable работает нормально.Однако я хочу напечатать точный номер строки, когда происходит исключение.Но номер строки печатается там, где вызывается RAISE_APPLICATION_ERROR.Как я могу сохранить номер строки, как хранится v_errorMsg?Я хочу видеть точный номер строки в скрипте на консоли Jenkins.

Ниже приведен мой пример сценария PLSQL, выполненный с использованием flyway.

DECLARE
  v_errFlag BOOLEAN := FALSE;
  v_errorMsg VARCHAR(400);
  v_dealId NUMBER;
BEGIN
  BEGIN
      USR.ENABLE_DISABLE_TRIGGERS('disable');
      --Data Correction starts
     -- Success Test
      --SELECT DEAL_ID INTO v_dealId FROM USR.DEAL WHERE ROWNUM=1; 
      -- Error Test
      SELECT DEAL_ID INTO v_dealId FROM USR.DEAL WHERE DEAL_ID=-1; 
      --Data Correction ends
      EXCEPTION
      WHEN OTHERS THEN
          v_errFlag := TRUE;
          v_errorMsg := SQLERRM;
  END;

  BEGIN
        USR.ENABLE_DISABLE_TRIGGERS('enable');
        SYS.DBMS_OUTPUT.PUT_LINE('Triggers Enabled');
      IF v_errFlag THEN
          RAISE_APPLICATION_ERROR(-20001,'Data Correction Failed :'||v_errorMsg);            
      ELSE 
          SYS.DBMS_OUTPUT.PUT_LINE('Data Correction Completed Successfully');
      END IF;
  END;
END;
/

Пример вывода для сценария ошибки

ORA-20001: Data Correction Failed :ORA-01403: no data found
ORA-06512: at line 25

1 Ответ

0 голосов
/ 27 марта 2019

Вы можете добавить dbms_utility.format_error_backtrace после exception when others then

exception when others then
  begin
    dbms_output.put_line( dbms_utility.format_error_backtrace );
    v_errFlag := true;
    v_errorMsg := sqlerrm;
  end;

для отображения номера строки, в которой произошла ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...