Методът на контекста е описан тук:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm
напр. (пример, адаптиран от горната връзка)
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;
/
След това задайте датите в приложението си с:
BEGIN set_dates_ctx_pkg.set(mydate1, mydate2); END;
/
След това потърсете параметрите с:
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');
Предимството на този подход е, че е много удобен за заявки; не включва DDL или DML по време на изпълнение и следователно няма транзакции, за които да се притеснявате; и е много бърз, защото не включва превключване на контекста SQL - PL/SQL.
Алтернативно:
Ако методът на контекста и методът на променливите на пакета на Джон не са възможни за вас, друг е да вмъкнете параметрите в таблица (например глобална временна таблица, ако изпълнявате заявката в същата сесия), след което да се присъедините към тази таблица от гледката. Недостатъкът е, че сега трябва да се уверите, че изпълнявате някакъв DML, за да вмъкнете параметрите, когато искате да изпълните заявката.