ORA-06508: PL/SQL: 호출 중인 프로그램 단위를 찾을 수 없습니다. 해결하기 (ORA-06508: pl/sql could not find program unit being called)

  • 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;
/ 

댓글