Сегодня расскажу, как можно несколькими способами откомпилировать битые объекты (процедуры, пакеты, функции и т.д.) в Oracle 11g.Компиляцию битых объектов (статус «INVALID») в Oracle можно сделать несколькими способами:
1. Процедурой:
/*Компиляция одного конкретного объекта*/ BEGIN dbms_ddl.alter_compile ('ваш тип объекта','ваша схема','ваше имя объекта'); END; --------- /*Компиляция битых объектов в цикле*/ BEGIN FOR l_crs IN (SELECT owner, object_name, object_type FROM all_objects WHERE STATUS = 'INVALID' AND owner='ваша схема' AND object_type='ваш тип объекта' /*Укажите свой объект*/ ) LOOP BEGIN IF l_crs.object_type = 'FUNCTION' THEN EXECUTE IMMEDIATE 'ALTER ' || l_crs.object_type || ' "' || l_crs.owner || '"."' || l_crs.object_name || '" COMPILE'; END IF; EXCEPTION WHEN OTHERS THEN NULL; DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK); RETURN; END; END LOOP; END; |
2. Средствами PL/SQL Developer (IDE):
Tools->Compile invalid objects->Run