आप या तो पहली क्वेरी का परिणाम एक (दिनांक) चर में प्राप्त कर सकते हैं और फिर उसका उपयोग कर सकते हैं:
SELECT sysdate into query_date FROM dual;
insert into test (my_date) values (query_date)
-- or if you really want dynamic SQL, with a bind variable
EXECUTE IMMEDIATE 'insert into test (my_date) values (:query_date)' using query_date;
या अपने प्रश्न को शाब्दिक रूप से पढ़ते हुए, पहली स्ट्रिंग को दूसरी स्ट्रिंग के हिस्से के रूप में जोड़कर उसका उपयोग करें:
query_date := "SELECT sysdate FROM dual";
EXECUTE IMMEDIATE 'insert into test (my_date) ' || query_date;
यदि आप दूसरे कथन को निष्पादित करने के बजाय उसका प्रिंट आउट लेते हैं तो आप देखेंगे:
insert into test (my_date) SELECT sysdate FROM dual
... जो वैध एसक्यूएल है। यह काम करेगा अगर query_string
अधिक जटिल है या स्वयं गतिशील रूप से निर्मित किया जा रहा है। लेकिन अगर query_string
. में कॉलम एक्सप्रेशन की संख्या चयन सूची भी भिन्न होती है, आपको कॉलम सूची को गतिशील रूप से भी बनाना होगा, अन्यथा आपके पास सम्मिलित करने के लिए बहुत अधिक या बहुत कम कॉलम होंगे।
वास्तव में आप यह कैसे करते हैं यह इस बात पर निर्भर करता है कि आप क्वेरी स्ट्रिंग कैसे बना रहे हैं - अनिवार्य रूप से जब आप क्वेरी स्ट्रिंग में अभिव्यक्ति जोड़ते हैं, तो आप एक अलग सूची में कॉलम नाम भी जोड़ देंगे, और इसके साथ समाप्त होगा:
EXECUTE IMMEDIATE 'insert into test (' || column_list ' ||) ' || query_string);
जहां column_list
col1, col2
. के रूप में बनाया गया है और query_string
select x.col1, y.col2 from ...
।
आपने जो दिखाया है उसमें डायनामिक एसक्यूएल का उपयोग करने का कोई स्पष्ट कारण नहीं है। या, यदि आप वास्तव में sysdate का उपयोग कर रहे हैं, तो इसे प्राप्त करने के लिए अलग क्वेरी की आवश्यकता है, जैसा कि आप कर सकते हैं:
insert into test (my_date) values (sysdate)
... इसलिए मुझे लगता है कि आपका वास्तविक परिदृश्य वास्तव में अधिक जटिल है। लेकिन ध्यान दें कि आप values
. का उपयोग नहीं करते हैं एक insert ... select ...
नमूना। आप एकल कॉलम और सबक्वेरी के साथ कर सकते हैं लेकिन यह तब भी एक अच्छा विचार नहीं है, और यदि आपके पास सबक्वेरी में कई कॉलम हैं तो यह काम नहीं करता है।