প্রশ্নটি কোনও স্ক্রিপ্টে একটি ভেরিয়েবল ব্যবহার করার অর্থ এটি আমার কাছে এটি এসকিউএল * প্লাসে ব্যবহৃত হবে।
সমস্যাটি হ'ল আপনি কোটগুলি মিস করেছেন এবং ওরাকল সংখ্যার মানটিকে পার্স করতে পারে না।
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
এই নমুনাটি স্বয়ংক্রিয় ধরণের রূপান্তরের কারণে (বা এটি যাই হোক না কেন) ভাল কাজ করে।
আপনি যদি এসকিউএল * প্লাসে 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
একটি উদ্ধৃতি দিয়ে, সুতরাং ওরাকলকে সংখ্যায় পার্স করতে বাধ্য করবেন না, ভাল হবে:
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
এসকিউএল * প্লাসে কোয়েরি কলাম মান ব্যবহার করে ভেরিয়েবল সঞ্চয় করার অন্য একটি উপায় রয়েছে ।
কল [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;
আপনি দেখতে পাচ্ছেন, এক্স.লগ মানটি বোকা_ভর ভেরিয়েবলে সেট করা হয়েছিল , সুতরাং আমরা বর্তমান ডিরেক্টরিতে একটি এক্স.লগ ফাইল খুঁজে পেতে পারি যাতে এতে কিছু লগইন থাকে।