- System.Data.OracleClient.OracleException (0x80131938): ORA-04068: 패키지의 기존 상태가 버려졌습니다
- ORA-04061: package body ""의 기존상태가 무효화되었습니다
- ORA-04065: 실행 불가, package body ""이(가) 변경 또는 삭제되었습니다.
- ORA-06508: PL/SQL: 호출 중인 프로그램 단위를 찾을 수 없습니다(: "").
- ORA-06512: 1행
ORA-06508 오류는 호출 중인 프로그램의 의존성, 종속성, 참조객체 등의 변경 및 삭제로 인하여 실행이 불가한 상황에서 발생합니다. 원인 중 하나는 프로그램에 컴파일, 컴파일 바디 등의 명령이 실행된 경우입니다.
- ORA-04068: existing state of packages has been discarded
- ORA-04061: existing state of package has been invalidated
- ORA-04065: not executed altered or dropped package body
- ORA-06508: pl/sql could not find program unit being called
- ORA-06512: at line 1
SET SERVEROUTPUT ON
BEGIN
FOR cur_rec IN (SELECT owner,
object_name,
object_type,
DECODE(object_type, 'PACKAGE', 1,
'PACKAGE BODY', 2, 2) AS recompile_order
FROM dba_objects
WHERE object_type IN ('PACKAGE', 'PACKAGE BODY','VIEW','FUNCTION','TRIGGER')
AND status != 'VALID'
ORDER BY 4)
LOOP
BEGIN
IF cur_rec.object_type = 'PACKAGE BODY' THEN
EXECUTE IMMEDIATE 'ALTER PACKAGE "' || cur_rec.owner ||
'"."' || cur_rec.object_name || '" COMPILE BODY';
ElSE
EXECUTE IMMEDIATE 'ALTER ' || cur_rec.object_type ||
' "' || cur_rec.owner || '"."' || cur_rec.object_name || '" COMPILE';
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(cur_rec.object_type || ' : ' || cur_rec.owner ||
' : ' || cur_rec.object_name);
END;
END LOOP;
END;
/