संदर्भ विधि यहाँ वर्णित है: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');
इस दृष्टिकोण का लाभ यह है कि यह बहुत ही क्वेरी-फ्रेंडली है; इसमें रनटाइम पर कोई डीडीएल या डीएमएल शामिल नहीं है, और इसलिए चिंता करने के लिए कोई लेनदेन नहीं है; और यह बहुत तेज़ है क्योंकि इसमें कोई SQL - PL/SQL संदर्भ स्विच शामिल नहीं है।
वैकल्पिक रूप से:
यदि संदर्भ विधि और जॉन की पैकेज चर विधि आपके लिए संभव नहीं है, तो दूसरा एक तालिका में पैरामीटर सम्मिलित करना है (उदाहरण के लिए एक वैश्विक अस्थायी तालिका, यदि आप उसी सत्र में क्वेरी चला रहे हैं), तो उस तालिका में शामिल हों दृष्टि से। नकारात्मक पक्ष यह है कि अब आपको यह सुनिश्चित करना होगा कि जब भी आप क्वेरी चलाना चाहते हैं तो पैरामीटर डालने के लिए आप कुछ डीएमएल चलाएं।