ORA-06508: PL/SQL: 호출 중인 프로그램 단위를 찾을 수 없습니다.
나는 오라클 10g과 두꺼비 11.5를 사용하고 있습니다.익명의 블록에서 api를 호출하려고 합니다.
추가 후 api를 다시 컴파일하면,dbms_output.put_line그런 다음 익명 블록을 실행하려고 하면 다음과 같은 오류가 표시됩니다.
"ORA-06508: PL/SQL: could not find program unit being called".
그러나 현재 세션을 종료하고 새 세션을 열면 익명 블록이 오류 없이 실행됩니다.
이 문제로 인해 API를 변경할 때마다 세션을 다시 연결해야 합니다.toad 또는 데이터베이스 수준에서 구성을 수행하여 이 문제를 해결할 수 있다면 누구나 도와줄 수 있습니까?
다음과 같은 스택의 마지막 오류만 보고하는 것 같습니다.
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "schema.package" has been invalidated
ORA-04065: not executed, altered or dropped package body "schema.package"
ORA-06508: PL/SQL: could not find program unit being called: "schema.package"
패키지가 선언하는 변수, 상수 및 커서의 값(규격 또는 본문)은 패키지 상태를 구성합니다.PL/SQL 패키지가 하나 이상의 변수, 상수 또는 커서를 선언하면 패키지는 상태 저장 상태이고, 그렇지 않으면 상태 비저장 상태입니다.
다시 컴파일하면 상태가 손실됩니다.
인스턴스화된 상태 저장 패키지의 본문이 (명시적으로, "ALTER PACKAGE 문"을 사용하여 또는 암시적으로) 다시 컴파일되는 경우, 패키지의 하위 프로그램을 다음에 호출하면 Oracle Database는 기존 패키지 상태를 무시하고 ORA-04068 예외를 발생시킵니다.
PL/SQL이 예외를 발생시킨 후 패키지에 대한 참조로 인해 Oracle Database가 패키지를 다시 초기화합니다.
패키지에 상태가 있으면 이 문제를 피할 수 없습니다.하지만 실제로 상태 저장을 위해 패키지가 필요한 경우는 매우 드물기 때문에 패키지에서 선언한 내용을 다시 확인해야 하지만 기능이나 절차 외에 해당 수준에서 실제로 필요한지 확인해야 합니다.하지만 10g을 섭취하고 있기 때문에 변수와 커서뿐만 아니라 상수도 포함됩니다.
그러나 인용된 문서의 마지막 단락은 다음에 동일한 세션에서 패키지를 참조할 때 오류가 발생하지 않고 다시 컴파일할 때까지 정상적으로 작동한다는 것을 의미합니다.
새로운 세션을 여는 것이 관건인 것 같습니다.
이 답을 보세요.
이전 답변을 기준으로 합니다.저의 경우에는 영향이 없었기 때문에 패키지 레벨의 글로벌 변수를 프로시저에서 제거하여 문제를 해결했습니다.
원래 대본은.
create or replace PACKAGE BODY APPLICATION_VALIDATION AS
V_ERROR_NAME varchar2(200) := '';
PROCEDURE APP_ERROR_X47_VALIDATION ( PROCESS_ID IN VARCHAR2 ) AS BEGIN
------ rules for validation... END APP_ERROR_X47_VALIDATION ;
/* Some more code
*/
END APPLICATION_VALIDATION; /
변수 하게 다시 되었습니다.V_ERROR_NAME했습니다.
수정된 코드
create or replace PACKAGE BODY APPLICATION_VALIDATION AS
PROCEDURE APP_ERROR_X47_VALIDATION ( PROCESS_ID IN VARCHAR2 ) AS
**V_ERROR_NAME varchar2(200) := '';**
BEGIN
------ rules for validation... END APP_ERROR_X47_VALIDATION ;
/* Some more code
*/
END APPLICATION_VALIDATION; /
나는 패키지 본체에만 변경 사항이 있음에도 불구하고 패키지 사양을 다시 컴파일했습니다.이것은 나의 문제를 해결했습니다.
언급URL : https://stackoverflow.com/questions/19376440/ora-06508-pl-sql-could-not-find-program-unit-being-called
'programing' 카테고리의 다른 글
| 닷넷의 프로세스 ID를 확인하는 동안 오류가 발생했습니다.응용 프로그램을 호스팅하는 exe.하나 이상의 오류가 발생했습니다. (0) | 2023.06.13 |
|---|---|
| 집합의 모든 하위 집합을 가져오는 방법?(전원 설정) (0) | 2023.06.13 |
| 스위치 대/소문자 구분 기호를 사용하는 경우 'break' 문 (0) | 2023.06.13 |
| VueJS - 저장된 데이터의 반응성 제한 (0) | 2023.06.13 |
| 수신기를 사용하여 데이터베이스의 데이터 변경 탐지 (0) | 2023.06.13 |