Phương pháp ngữ cảnh được mô tả tại đây:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm
ví dụ. (ví dụ phỏng theo liên kết trên)
CREATE CONTEXT dates_ctx USING set_dates_ctx_pkg;
CREATE OR REPLACE PACKAGE set_dates_ctx_pkg IS
PROCEDURE set(d1 in date, d2 in date);
END;
/
CREATE OR REPLACE PACKAGE BODY set_dates_ctx_pkg IS
PROCEDURE set(d1 in date, d2 in date) IS
BEGIN
DBMS_SESSION.SET_CONTEXT('dates_ctx', 'd1', TO_CHAR(d1,'DD-MON-YYYY'));
DBMS_SESSION.SET_CONTEXT('dates_ctx', 'd2', TO_CHAR(d2,'DD-MON-YYYY'));
END;
END;
/
Sau đó, đặt ngày trong đơn đăng ký của bạn với:
BEGIN set_dates_ctx_pkg.set(mydate1, mydate2); END;
/
Sau đó, truy vấn các tham số với:
SELECT bla FROM mytable
WHERE mydate
BETWEEN TO_DATE(
SYS_CONTEXT('dates_ctx', 'd1')
,'DD-MON-YYYY')
AND TO_DATE(
SYS_CONTEXT('dates_ctx', 'd2')
,'DD-MON-YYYY');
Ưu điểm của cách tiếp cận này là nó rất thân thiện với truy vấn; nó không liên quan đến DDL hoặc DML trong thời gian chạy, và do đó không có giao dịch nào phải lo lắng; và nó rất nhanh vì nó không liên quan đến chuyển đổi ngữ cảnh SQL - PL / SQL.
Ngoài ra:
Nếu bạn không thể sử dụng phương thức ngữ cảnh và phương thức biến gói của John, thì một phương pháp khác là chèn các tham số vào bảng (ví dụ:bảng tạm thời toàn cục, nếu bạn đang chạy truy vấn trong cùng một phiên), sau đó tham gia vào bảng đó từ chế độ xem. Nhược điểm là bây giờ bạn phải đảm bảo rằng bạn chạy một số DML để chèn các tham số bất cứ khi nào bạn muốn chạy truy vấn.