Поймать проблему соединения Oracle в хранимой процедуре - PullRequest
0 голосов
/ 08 июля 2019

У меня есть хранимая процедура, которая извлекает данные из другой базы данных, используя DB Link. Время от времени возникают проблемы с подключением. Похоже, что существуют временные сетевые сообщения, и когда они встречаются, они прекращают обработку, но не отключаются.

Есть ли способ перехватить это и отключить зависший сеанс?

Это часть хранимой процедуры, которая извлекает данные:

V_SQLEXP := 'INSERT INTO CRITERIA_STAGING (COL1, COL2, COLn) 
  SELECT COL1, COL2, COLn FROM BLAH.CRITERIA_T@TCMAN0 WHERE ' || V_SITESTATUS || ' = 1';
  EXECUTE IMMEDIATE V_SQLEXP;
  COMMIT;
  LVIPROCESSED:= 1;
  EXCEPTION WHEN OTHERS THEN
    LVIPROCESSED:= 0; -- FETCH FAILED
    PKGIDCHANDLEERROR.USPHANDLEERROR('USPPICK_ITEM:SAFETCH', LVIERRORCODE);
    DBMS_LOCK.SLEEP(LVIFETCHRETRYSLEEP);
    GOTO FETCH_FROM_OTHERDB;
...