Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Có cách nào để xác định xem một gói có trạng thái trong Oracle không?

Có vẻ như những gì bạn muốn là có thể liệt kê tất cả các gói có thể có trạng thái.

Những gì bạn đang tìm kiếm chỉ là các gói có bất kỳ biến hoặc hằng số toàn cục nào. Đối với một gói duy nhất, điều này là khá đơn giản bằng cách kiểm tra. Tuy nhiên, để xem xét tất cả các gói trong một lược đồ, bạn có thể sử dụng PL / Scope:

Trước tiên, hãy đăng nhập với tư cách là chủ sở hữu giản đồ, bật PL / Phạm vi trong phiên của bạn:

alter session set plscope_settings='IDENTIFIERS:ALL';

Sau đó, biên dịch lại tất cả các phần thân gói của bạn.

Sau đó, chạy truy vấn này để tìm tất cả các biến và hằng số được khai báo ở cấp độ gói:

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'
  );

Tôi đề nghị danh sách các gói kết quả sẽ là mục tiêu của bạn.

Nếu bạn đang sử dụng 11gR2, các hằng số không còn gây ra sự cố này nữa, vì vậy bạn nên sử dụng truy vấn này để thay thế:

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'
  );



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi DYLD_LIBRARY_PATH của Oracle Instantclient

  2. Biểu thức chính quy cho REGEXP_SUBSTR trong Oracle

  3. Lỗi Oracle:[:thành:toán tử không xác định

  4. làm thế nào để sử dụng xmltable trong oracle?

  5. Ngăn chặn trình kích hoạt chèn