programing

Oracle에서 패키지에 상태가 있는지 확인할 수 있는 방법이 있습니까?

sourcejob 2023. 8. 2. 09:01
반응형

Oracle에서 패키지에 상태가 있는지 확인할 수 있는 방법이 있습니까?

Oracle에서 패키지에 상태 또는 상태 비저장 여부를 확인할 수 있는 방법이 있습니까?데이터 사전에 해당 정보가 포함된 보기가 없습니다.

"ORA-04068: 기존 패키지 문자열 상태가 폐기되었습니다" 오류는 다소 성가신 일입니다.패키지에서 패키지 변수를 제거하여 제거할 수 있습니다. 11g은 컴파일 시간 상수가 모두 포함된 변수가 있는 패키지를 상태 비저장으로 처리하는 기능을 도입했습니다.

저는 두 개의 세션을 가지고 하나로 패키지를 컴파일하고 다른 세션을 호출하여 예외가 발생하는지 확인할 수 있지만, 이 경우 패키지에서 프로시저를 호출해야 하므로 바람직하지 않을 수 있습니다.

잠재적으로 상태가 있을 수 있는 모든 패키지를 나열할 수 있는 것처럼 들립니다.

원하는 것은 전역 변수 또는 상수가 있는 패키지입니다.단일 패키지의 경우 검사를 통해 매우 간단합니다.그러나 스키마에서 모든 패키지를 보려면 PL/Scope를 사용할 수 있습니다.

먼저 스키마 소유자로 로그인하고 세션에서 PL/Scope를 켭니다.

alter session set plscope_settings='IDENTIFIERS:ALL';

그런 다음 모든 패키지 본문을 다시 컴파일합니다.

그런 다음 이 쿼리를 실행하여 패키지 수준에서 선언된 모든 변수와 상수를 찾습니다.

select object_name AS package,
       type,
       name AS variable_name
from user_identifiers
where object_type IN ('PACKAGE','PACKAGE BODY')
and usage = 'DECLARATION'
and type in ('VARIABLE','CONSTANT')
and usage_context_id in (
  select usage_id
  from user_identifiers
  where type = 'PACKAGE'
  );

저는 결과적인 패키지 목록이 당신의 목표가 될 것을 제안합니다.

11gR2에 있는 경우 상수는 더 이상 이 문제를 발생시키지 않으므로 대신 이 쿼리를 사용합니다.

select object_name AS package,
       type,
       name AS variable_name
from user_identifiers
where object_type IN ('PACKAGE','PACKAGE BODY')
and usage = 'DECLARATION'
and type = 'VARIABLE'
and usage_context_id in (
  select usage_id
  from user_identifiers
  where type = 'PACKAGE'
  );

언급URL : https://stackoverflow.com/questions/11042712/is-there-any-way-to-determine-if-a-package-has-state-in-oracle

반응형