De contextmethode wordt hier beschreven:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm
bijv. (voorbeeld aangepast van de bovenstaande 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;
/
Stel vervolgens de data in uw aanvraag in met:
BEGIN set_dates_ctx_pkg.set(mydate1, mydate2); END;
/
Vraag vervolgens de parameters op met:
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');
Het voordeel van deze aanpak is dat deze zeer vraagvriendelijk is; het omvat geen DDL of DML tijdens runtime, en daarom zijn er geen transacties om je zorgen over te maken; en het is erg snel omdat er geen SQL - PL/SQL-contextomschakeling nodig is.
Alternatief:
Als de contextmethode en de methode van John's pakketvariabelen voor u niet mogelijk zijn, is een andere manier om de parameters in een tabel in te voegen (bijvoorbeeld een globale tijdelijke tabel, als u de query in dezelfde sessie uitvoert), en vervolgens deelnemen aan die tabel van het uitzicht. Het nadeel is dat je er nu voor moet zorgen dat je wat DML uitvoert om de parameters in te voegen wanneer je de query wilt uitvoeren.