मेरी व्यक्तिगत प्राथमिकता बाइंड वेरिएबल्स कैरेक्टर स्ट्रिंग्स (VARCHAR2) बनाना है, और ओरेकल को कैरेक्टर से अपने आंतरिक स्टोरेज फॉर्मेट में रूपांतरण करने दें। स्वीकार्य प्रारूप में डेटा मानों को शून्य टर्मिनेटेड स्ट्रिंग्स के रूप में प्रदर्शित करना काफी आसान है (सी में)।
तो, SQL को इस तरह लिखने के बजाय:
SET MY_NUMBER_COL = :b1
, MY_DATE_COL = :b2
मैं SQL को इस तरह लिखता हूँ:
SET MY_NUMBER_COL = TO_NUMBER( :b1 )
, MY_DATE_COL = TO_DATE( :b2 , 'YYYY-MM-DD HH24:MI:SS')
और बाइंड वैरिएबल के रूप में कैरेक्टर स्ट्रिंग्स की आपूर्ति करें।
इस दृष्टिकोण के कुछ फायदे हैं।
एक यह है कि उन मुद्दों और बग के आसपास काम करता है जिनका सामना अन्य डेटा प्रकारों को बाध्य करने में होता है।
एक अन्य लाभ यह है कि Oracle ईवेंट 10046 ट्रेस पर बाइंड वैल्यू को समझना आसान होता है।
साथ ही, एक व्याख्या योजना (मेरा मानना है) सभी बाध्य चरों को VARCHAR2 होने की अपेक्षा करता है, इसका मतलब है कि समझाया जा रहा बयान वास्तविक कथन निष्पादित होने से थोड़ा अलग है (अंतर्निहित डेटा रूपांतरणों के कारण वास्तविक में बाध्य तर्कों के डेटाटाइप कथन VARCHAR2 नहीं हैं।)
और (कम महत्वपूर्ण) जब मैं TOAD में कथन का परीक्षण कर रहा हूं, तो इनपुट बॉक्स में स्ट्रिंग्स में टाइप करने में सक्षम होना आसान है, और ड्रॉपडाउन सूची बॉक्स में डेटाटाइप को बदलने के साथ गड़बड़ नहीं करना है।
मैंने ब्यूटिन TO_NUMBER और TO_DATE फ़ंक्शंस को डेटा को मान्य करने दिया। (Oracle के पुराने संस्करणों में, कम से कम, मुझे सीधे DATE मान को बाध्य करने के साथ समस्याओं का सामना करना पड़ा, और इसने वैधता जाँच (कम से कम कुछ) को दरकिनार कर दिया, और अमान्य दिनांक मानों को डेटाबेस में संग्रहीत करने की अनुमति दी।
यह पिछले अनुभव के आधार पर सिर्फ एक व्यक्तिगत वरीयता है। मैं पर्ल डीबीडी के साथ इसी दृष्टिकोण का उपयोग करता हूं।
मुझे आश्चर्य है कि इस विषय पर टॉम कायटे (asktom.oracle.com) का क्या कहना है?