Kontekstmetoden er beskrevet her:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm
for eksempel. (eksempel tilpasset fra ovenstående link)
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;
/
Indstil derefter datoerne i din ansøgning med:
BEGIN set_dates_ctx_pkg.set(mydate1, mydate2); END;
/
Forespørg derefter parametrene 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');
Fordelen ved denne tilgang er, at den er meget forespørgselsvenlig; det involverer ingen DDL eller DML under kørsel, og derfor er der ingen transaktioner at bekymre sig om; og det er meget hurtigt, fordi det ikke involverer nogen SQL - PL/SQL kontekstswitch.
Alternativt:
Hvis kontekstmetoden og Johns pakkevariablemetode ikke er mulig for dig, er en anden metode at indsætte parametrene i en tabel (f.eks. en global midlertidig tabel, hvis du kører forespørgslen i samme session), og derefter slutte sig til den tabel fra udsigten. Ulempen er, at du nu skal sørge for at køre noget DML for at indsætte parametrene, når du vil køre forespørgslen.