ORA-04021: истекло время ожидания при ожидании блокировки объекта

oracle plsql sqlplus

32631 просмотра

2 ответа

У меня есть этот анонимный блок PL / SQL, который вычисляет и печатает возвращаемое значение из таблицы.

DECLARE
    U_ID NUMBER :=39;
    RETAIL BINARY_FLOAT:=1;
    FLAG NUMBER;
BEGIN
    SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID INTO RETAIL, FLAG FROM UNITS WHERE UNIT_ID=U_ID;
    LOOP
    SELECT NVL(MAX(UNIT_ID),U_ID) INTO FLAG FROM  UNITS WHERE FATHER_ID=FLAG;
    IF FLAG=U_ID THEN EXIT; END IF;
    SELECT RETAIL* RETAIL_AMOUNT INTO RETAIL FROM UNITS WHERE UNIT_ID=FLAG;
    EXIT WHEN FLAG=U_ID;
    END LOOP;
DBMS_OUTPUT.PUT_LINE( RETAIL);
END;

Этот блок работает правильно, но я хотел сделать то же самое, используя функцию PL / SQL

Я написал функцию следующим образом:

CREATE OR REPLACE FUNCTION GET_UNIT_RETAIL(U_ID NUMBER)
     RETURN NUMBER
IS
    RETAIL BINARY_FLOAT:=1;
    FLAG NUMBER;
BEGIN
    SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID 
    INTO RETAIL, FLAG 
    FROM UNITS 
    WHERE UNIT_ID=U_ID;

    LOOP
        SELECT NVL(MAX(UNIT_ID),U_ID) 
        INTO FLAG 
        FROM  UNITS 
        WHERE FATHER_ID=FLAG;
        IF FLAG=U_ID THEN 
            EXIT; 
        END IF;
        SELECT RETAIL* RETAIL_AMOUNT 
        INTO RETAIL 
        FROM UNITS 
        WHERE UNIT_ID=FLAG;
        EXIT WHEN FLAG=U_ID;
    END LOOP;

    RETURN NUMBER;
END;
/

Когда я пытаюсь выполнить приведенный выше код для сохранения функции в базе данных, среда (SQL * PLUS) долго зависает и в конце возвращает эту ошибку:

ОШИБКА в строке 1:
ORA-04021: истекло время ожидания при ожидании блокировки объекта

В чем проблема ??? Пожалуйста !

Автор: Saddam Meshaal Источник Размещён: 08.11.2019 11:01

Ответы (2)


4 плюса

Решение

Похоже, проблема ddl_lock

Взгляните,
dba_ddl_locksчтобы увидеть, кто «блокирует» создание или замену.

Также попробуйте создать под другим именем - и посмотрите, что получится.

Автор: Plirkee Размещён: 20.08.2016 08:02

0 плюса

Проблема была в том, что Объект GET_UNIT_RETAILбыл занят другой средой. Вот ответ:

https://community.oracle.com/thread/2321256

Автор: Saddam Meshaal Размещён: 20.08.2016 08:54
Вопросы из категории :
32x32