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

nội dung của tờ khai gói

Bạn có thể tìm chi tiết về các hàm và thủ tục trong một gói bằng cách truy vấn ALL_ARGUMENTS chế độ xem từ điển dữ liệu hoặc các anh em của nó USER_ARGUMENTS và DBA_ARGUMENTS.

Ví dụ, tôi đã tạo gói sau:

CREATE OR REPLACE PACKAGE demo AS
    PROCEDURE p_none;
    PROCEDURE p_two(a INTEGER, b INTEGER);

    FUNCTION f_none RETURN INTEGER;
    FUNCTION f_three(c INTEGER, q INTEGER, z INTEGER) RETURN INTEGER;
END;

Sau đó, tôi đã chạy truy vấn sau đây với nó:

SQL> select object_name, argument_name, sequence, in_out
  2    from all_arguments
  3   where package_name = 'DEMO'
  4   order by object_name, sequence;

OBJECT_NAME                    ARGUMENT_NAME                    SEQUENCE IN_OUT
------------------------------ ------------------------------ ---------- ---------
F_NONE                                                                 1 OUT
F_THREE                                                                1 OUT
F_THREE                        C                                       2 IN
F_THREE                        Q                                       3 IN
F_THREE                        Z                                       4 IN
P_NONE                                                                 0 IN
P_TWO                          A                                       1 IN
P_TWO                          B                                       2 IN

Tại đây, bạn có thể thấy tất cả các đối số cho các hàm và thủ tục trong gói của chúng tôi. Lưu ý rằng có một mục bổ sung có tên đối số null cho giá trị trả về cho mỗi một trong hai hàm. Ngoài ra, thủ tục không có đối số có một hàng có tên đối số rỗng và SEQUENCE không giá trị.

Vì vậy, để liệt kê tất cả các hàm, bạn có thể tìm kiếm tất cả các mục trong dạng xem này với tên đối số rỗng và SEQUENCE giá trị không bằng 0:

SQL> select distinct object_name
  2    from all_arguments
  3   where package_name = 'DEMO'
  4     and argument_name is null
  5     and sequence != 0;

OBJECT_NAME
------------------------------
F_THREE
F_NONE

Việc liệt kê các thủ tục theo cách tương tự sẽ phức tạp hơn một chút:

SQL> select distinct object_name
  2    from all_arguments a1
  3   where package_name = 'DEMO'
  4     and (   sequence = 0
  5          or not exists (select 0
  6                           from all_arguments a2
  7                          where a2.package_name = 'DEMO'
  8                            and a2.object_name = a1.object_name
  9                            and a2.argument_name is null));

OBJECT_NAME
------------------------------
P_TWO
P_NONE

Mặc dù cách tiếp cận này dường như hoạt động với các thủ tục và hàm, nhưng tôi không biết làm thế nào để liệt kê các biến phạm vi gói, các loại và những thứ khác được khai báo trong tiêu đề gói mà không cần phân tích cú pháp thông số gói, như được gợi ý bởi @wweicker.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. talend etl oracle error chèn hàng

  2. Có cần thiết phải vứt bỏ DbCommand sau khi sử dụng không?

  3. Làm cách nào để chèn dấu thời gian trong Oracle?

  4. Oracle:Nhận dữ liệu trên tất cả các tháng, 0 nếu không có dữ liệu

  5. Cập nhật giá trị thông qua trình kích hoạt SAU KHI CẬP NHẬT Oracle 11g