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.