Có một cách để làm điều này, miễn là bạn đang ở trên 10g hoặc cao hơn. Nó được gọi là Biên dịch có điều kiện. Đây là một tính năng rất gọn gàng, cung cấp cú pháp đặc biệt để chúng tôi có thể thay đổi mã PL / SQL của mình tại thời điểm biên dịch.
Khi nó xảy ra, tôi đã sử dụng tính năng này một cách chính xác để hiển thị các gói riêng tư trong một thông số kỹ thuật để tôi có thể chạy các bài kiểm tra UTPLSQL chống lại chúng.
Đây là cú pháp đặc biệt:
create or replace package my_pkg
as
$IF $$dev_env_test $THEN
PROCEDURE private_proc;
$END
FUNCTION public_function return date;
end my_pkg;
/
Biến có ký hiệu hai đô la đó là cờ Tổng hợp có điều kiện.
Nếu tôi mô tả gói, chúng ta chỉ có thể thấy gói công khai:
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Bây giờ tôi đặt cờ điều kiện và biên dịch lại gói, và như thể bằng phép thuật ...
SQL> alter session set plsql_ccflags='dev_env_test:true'
2 /
Session altered.
SQL> alter package my_pkg compile
2 /
Package altered.
SQL> desc my_pkg
PROCEDURE PRIVATE_PROC
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Việc tư nhân hóa các chức năng đơn giản như bạn nghĩ:
SQL> alter session set plsql_ccflags='dev_env_test:false'
2 /
Session altered.
SQL> alter package my_pkg compile
2 /
Package altered.
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
Chúng tôi có thể làm nhiều hơn nữa với biên dịch có điều kiện. Nó được bao gồm trong các tài liệu. Tìm hiểu thêm.