Bạn có thể sử dụng RESTRICT_REFERENCES để chỉ ra rằng một hàm sẽ không đọc / ghi gói hoặc trạng thái cơ sở dữ liệu.
CREATE PACKAGE t_pkg AS
FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2;
PRAGMA RESTRICT_REFERENCES(showup, WNDS, RNDS);
END t_pkg;
/
-- create the package body
CREATE OR REPLACE PACKAGE BODY t_pkg AS
FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2 IS
v_val varchar2(1);
BEGIN
select dummy into v_val from dual;
RETURN v_val;
END;
END t_pkg;
/
Đã từng có trường hợp SQL không cho phép bạn gọi một hàm trừ khi nó đưa ra lời hứa như vậy, nhưng hạn chế đó đã bị loại bỏ.
Tôi muốn biến nó thành một công cụ phân biệt giữa một thủ tục và một hàm. Cần lưu ý rằng nếu một hàm PL / SQL tạo ra ngoại lệ NO_DATA_FOUND, thì một câu lệnh SQL đang gọi sẽ không bị lỗi (vì không tìm thấy dữ liệu nào không phải là lỗi SQL). Vì vậy, tôi thích sử dụng các thủ tục trừ khi đối tượng được thiết kế đặc biệt để được gọi từ SQL.