Kontextmetoden beskrivs här:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm
t.ex. (exempel anpassat från länken ovan)
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;
/
Ange sedan datumen i din ansökan med:
BEGIN set_dates_ctx_pkg.set(mydate1, mydate2); END;
/
Fråga sedan parametrarna med:
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');
Fördelen med detta tillvägagångssätt är att det är mycket frågevänligt; det involverar ingen DDL eller DML vid körning, och därför finns det inga transaktioner att oroa sig för; och det är mycket snabbt eftersom det inte involverar någon SQL - PL/SQL kontextväxel.
Alternativt:
Om kontextmetoden och Johns paketvariabler inte är möjliga för dig, är en annan att infoga parametrarna i en tabell (t.ex. en global temporär tabell, om du kör frågan i samma session), och sedan gå med i den tabellen från utsikten. Nackdelen är att du nu måste se till att du kör lite DML för att infoga parametrarna när du vill köra frågan.