प्रश्न स्क्रिप्ट के माध्यम से चर का उपयोग करने का है। मेरे लिए इसका उपयोग SQL * प्लस में किया जाएगा।
समस्या यह है कि आप उद्धरण याद कर रहे हैं और Oracle संख्या के लिए मान को पार्स नहीं कर सकता है।
SQL> DEFINE num = 2018
SQL> SELECT &num AS your_num FROM dual;
old 1: SELECT &num AS your_num FROM dual
new 1: SELECT 2018 AS your_num FROM dual
YOUR_NUM
----------
2018
Elapsed: 00:00:00.01
यह नमूना स्वचालित प्रकार के रूपांतरण (या इसे जो भी कहा जाता है) के कारण ठीक काम करता है।
यदि आप SQL * Plus में DEFINE लिखकर चेक करते हैं, तो यह दर्शाता है कि संख्या चर CHAR है।
SQL>define
DEFINE NUM = "2018" (CHAR)
इस मामले में यह कोई समस्या नहीं है, क्योंकि ओरेकल पार्सिंग स्ट्रिंग से नंबर से निपट सकता है यदि यह एक वैध संख्या होगी।
जब स्ट्रिंग संख्या के लिए पार्स नहीं कर सकती है, तो ओरेकल इसके साथ सौदा नहीं कर सकता है।
SQL> DEFINE num = 'Doh'
SQL> SELECT &num AS your_num FROM dual;
old 1: SELECT &num AS your_num FROM dual
new 1: SELECT Doh AS your_num FROM dual
SELECT Doh AS your_num FROM dual
*
ERROR at line 1:
ORA-00904: "DOH": invalid identifier
एक उद्धरण के साथ, ताकि Oracle को संख्या में पार्स करने के लिए मजबूर न करें, ठीक हो जाएगा:
17:31:00 SQL> SELECT '&num' AS your_num FROM dual;
old 1: SELECT '&num' AS your_num FROM dual
new 1: SELECT 'Doh' AS your_num FROM dual
YOU
---
Doh
तो, मूल प्रश्न का उत्तर देने के लिए, यह इस नमूने की तरह होना चाहिए:
SQL> DEFINE stupidvar = 'X'
SQL>
SQL> SELECT 'print stupidvar:' || '&stupidvar'
2 FROM dual
3 WHERE dummy = '&stupidvar';
old 1: SELECT 'print stupidvar:' || '&stupidvar'
new 1: SELECT 'print stupidvar:' || 'X'
old 3: WHERE dummy = '&stupidvar'
new 3: WHERE dummy = 'X'
'PRINTSTUPIDVAR:'
-----------------
print stupidvar:X
Elapsed: 00:00:00.00
क्वेरी कॉलम मूल्य का उपयोग करके SQL * प्लस में चर को स्टोर करने का एक और तरीका है ।
कर्नल [UMN] है new_value क्षेत्र नाम से क्वेरी से दुकान मूल्य के लिए विकल्प।
SQL> COLUMN stupid_column_name new_value stupid_var noprint
SQL> SELECT dummy || '.log' AS stupid_column_name
2 FROM dual;
Elapsed: 00:00:00.00
SQL> SPOOL &stupid_var.
SQL> SELECT '&stupid_var' FROM DUAL;
old 1: SELECT '&stupid_var' FROM DUAL
new 1: SELECT 'X.log' FROM DUAL
X.LOG
-----
X.log
Elapsed: 00:00:00.00
SQL>SPOOL OFF;
जैसा कि आप देख सकते हैं, X.log मान को stup_var चर में सेट किया गया था , इसलिए हम X.log फ़ाइल को मौजूदा निर्देशिका में कुछ लॉग में पा सकते हैं।