У меня есть хранимая процедура в Oracle 11g, которая зависает время от времени. Когда это произойдет, я не могу перекомпилировать его, и единственный вариант, который у меня есть, - это убить процесс SQL Developer. Я согласен с тем, что процедура проверяет множество записей в разных таблицах, представлениях и материализованных представлениях, но когда нет такой проблемы, для возврата набора результатов требуется всего 1-2 секунды. Я пробовал убивать все сеансы и даже перезапускать базу данных, но ничего не помогает. И он просто фиксируется сам по себе. Я отправляю содержание процедуры в случае, если вам нужно, чтобы увидетьСохраненная процедура иногда зависает
create or replace
PROCEDURE SP_STAJ_FOR_AGAPUS(
V_SSN IN NUMBER,
V_WEYEARNEW OUT NUMBER,
V_WEMONTHNEW OUT NUMBER,
V_WEDAYNEW OUT NUMBER,
V_LS_YEAR OUT NUMBER,
V_LS_MONTH OUT NUMBER)
AS
BEGIN
SELECT NVL(TRUNC(MDC.DAY_COUNT/360),0) WEYEARNEW, NVL(TRUNC(MOD(MDC.DAY_COUNT,360)/30),0)
WEMONTHNEW, NVL(MOD(MOD(MDC.DAY_COUNT,360),30),0) WEDAYNEW,NVL(LS.LS_YEAR,0)LS_YEAR,NVL(
LS.LS_MONTH,0)LS_MONTH
INTO V_WEYEARNEW,V_WEMONTHNEW,V_WEDAYNEW,V_LS_YEAR,V_LS_MONTH
FROM SSPF_CENTRE.PERSONS PER
LEFT JOIN
(SELECT SSN, SUM(DAY_COUNT) DAY_COUNT FROM
(SELECT SSN, YEAR, AG.CHECK_PERIOD_MDSS(SSN,YEAR) DAY_COUNT FROM
(SELECT SSN, YEAR FROM SSPF_CENTRE.PERSON_ACCOUNTS GROUP BY SSN,YEAR
UNION ALL
SELECT SSN, SPECIAL_YEAR YEAR
FROM SSPF_CENTRE.person_accounts_06
GROUP BY SSN,SPECIAL_YEAR
UNION ALL SELECT
P.COMMON_SSN, PA.YEAR FROM SSPF_CENTRE.PERSON_ACCOUNTS PA, SSPF_CENTRE.PERSONS P
WHERE
--COMMON_SSN = V_SSN AND
PA.SSN = P.SSN(+) AND P.COMMON_SSN <> P.SSN GROUP BY P.COMMON_SSN,PA.YEAR
) GROUP BY SSN,YEAR
) GROUP BY SSN
) MDC ON PER.SSN=MDC.SSN
LEFT JOIN
(SELECT SSN, AG.CALCULATE_YEAR(LS_DAYS) LS_YEAR, AG.CALCULATE_MONTH(LS_DAYS) LS_MONTH FROM
(SELECT SSN, GET_DAYS(SSN) LS_DAYS FROM MAT_SERVICE_NEW GROUP BY SSN
)
) LS ON PER.SSN=LS.SSN
WHERE PER.SSN=V_SSN;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
V_WEYEARNEW:=0;
V_WEMONTHNEW:=0;
V_WEDAYNEW:=0;
V_LS_YEAR:=0;
V_LS_MONTH:=0;
END;
END SP_STAJ_FOR_AGAPUS;
Странная вещь, хотя, если я запускаю какой-либо SQL против любого из отношений, используемых внутри процедуры, я получаю результат при ускорении. Нет никакой проблемы, когда я выполняю функции независимо. Содержание функций настолько велико, что не стоит публиковать их здесь, но чтобы дать общее представление, эти функции также выбираются из одних и тех же таблиц, представлений. –