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

Truy xuất danh sách các thủ tục / chức năng riêng tư từ một phần thân gói

Bản chất của các chức năng riêng là chúng mang tính riêng tư. Không có chế độ xem từ điển dữ liệu nào hiển thị chúng theo mặc định. USER_PROCEDURES và USER_ARGUMENTS chỉ hiển thị thông tin cho các thủ tục công khai (những thủ tục được xác định trong thông số gói0.

Tuy nhiên, chúng tôi có thể lấy thông tin về chúng bằng PL / SCOPE, nhưng làm như vậy cần thêm một chút nỗ lực:

  1. SQL> alter session set plscope_settings='IDENTIFIERS:ALL';
  2. SQL> alter package your_package compile body;

Giờ đây, bạn có thể tìm thấy các đơn vị chương trình riêng của mình bằng truy vấn sau:

select ui.type, ui.name, ui.usage_id
from user_identifiers ui
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DEFINITION'
and ui.type in ('PROCEDURE', 'FUNCTION')
minus
( select 'PROCEDURE', upr.procedure_name 
  from user_procedures upr
  where upr.object_name = 'YOUR_PACKAGE'
  union
  select 'FUNCTION', uarg.object_name
  from user_arguments uarg
  where uarg.package_name = 'YOUR_PACKAGE'
  and uarg.position = 0 
);

Để nhận các đối số của một thủ tục riêng tư, hãy cắm USAGE_ID từ truy vấn trước đó vào truy vấn này:

select ui.name
       , ui.type
       , ui.usage_id
       , ui2.type as param_datatype
from user_identifiers ui
     left join user_identifiers ui2
        on ui2.usage_context_id = ui.usage_id 
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DECLARATION'
and ui.usage_context_id = :private_proc_usage_id
/

Đây cần phải là liên kết bên trái vì user_identifiers có các mục nhập kiểu dữ liệu cho các kiểu dữ liệu vô hướng (ký tự, số, ngày tháng, khối) nhưng không phải là các kiểu dữ liệu phức tạp (kiểu xml, các kiểu do người dùng xác định).

Chúng tôi có thể nhận được rất nhiều thông tin về các thủ tục từ PL / SCOPE, mặc dù nó không dễ dàng như truy vấn USER_PROCEDURES hoặc USER_ARGUMENTS (trên thực tế, nó rất khó hiểu). Tìm hiểu thêm. Lưu ý rằng dữ liệu PL / SCOPE được lưu trữ trên không gian bảng SYSAUX, vì vậy, đừng dính vào nước nóng với DBA của bạn!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate ánh xạ một kiểu dữ liệu boolean thành gì khi sử dụng cơ sở dữ liệu Oracle theo mặc định?

  2. Làm thế nào để xem một hình ảnh từ cột blob trong Oracle với JasperReports?

  3. Hàm JSON_VALUE () trong Oracle

  4. Từ cuối cùng trong câu:Trong SQL (có thể sử dụng cụm từ thông dụng?)

  5. JDBC trả về tập kết quả trống