Metoda kontekstowa jest opisana tutaj:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm
np. (przykład dostosowany z powyższego linku)
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;
/
Następnie ustaw daty w aplikacji za pomocą:
BEGIN set_dates_ctx_pkg.set(mydate1, mydate2); END;
/
Następnie zapytaj o parametry za pomocą:
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');
Zaletą tego podejścia jest to, że jest bardzo przyjazne dla zapytań; nie wymaga DDL ani DML w czasie wykonywania, a zatem nie trzeba się martwić o transakcje; i jest bardzo szybki, ponieważ nie wymaga przełączania kontekstu SQL - PL/SQL.
Alternatywnie:
Jeśli metoda kontekstowa i metoda zmiennych pakietowych Johna nie są dla Ciebie możliwe, inną metodą jest wstawienie parametrów do tabeli (np. globalnej tabeli tymczasowej, jeśli zapytanie jest wykonywane w tej samej sesji), a następnie dołącz do tej tabeli z widoku. Minusem jest to, że musisz teraz upewnić się, że uruchamiasz trochę DML, aby wstawić parametry za każdym razem, gdy chcesz uruchomić zapytanie.