Oracle SQL स्क्रिप्ट चलाएँ और कमांड प्रॉम्प्ट के माध्यम से sqlplus.exe से बाहर निकलें


114

मैं एक SQL कमांड प्रॉम्प्ट के माध्यम से SQL प्लस के माध्यम से एक Oracle स्क्रिप्ट चलाना चाहूंगा। स्क्रिप्ट में "निकास" कमांड नहीं है, लेकिन मैं अभी भी एसक्यूएल प्लस को बाहर निकलने के लिए पसंद करूंगा, स्क्रिप्ट के पूरा होने पर कमांड प्रॉम्प्ट पर नियंत्रण लौटाएगा। मेरा लक्ष्य स्क्रिप्ट को संशोधित किए बिना ऐसा करना है । क्या यह संभव है?


क्या आप इसे "sqlplus .... <scriptname" या "sqlplus ... @scriptname" के साथ निष्पादित कर रहे हैं ?? मुझे अलग-अलग व्यवहार मिलते हैं जिसके आधार पर आप यूनिक्स करते हैं।
रनिग

जवाबों:


140

दूसरा तरीका बैच फ़ाइल में इस कमांड का उपयोग करना है:

echo exit | sqlplus user/pass@connect @scriptname

1
ठंडा! क्या आपको पता है कि sqlplus सेशन में "एग्जिट" कैसे जुड़ जाता है?

6
Sqlplus कमांड स्क्रिप्ट को चलाता है फिर मानक इनपुट से अधिक कमांड पढ़ने की कोशिश करता है। इस पाइपलाइन के साथ, मानक इनपुट से रीड स्ट्रिंग गूंज कमांड से "एक्जिट" पढ़ेगा, जिससे sqlplus बाहर निकल जाएगा।
डेव कोस्टा

बहुत बढ़िया - यह वही है जो मैं देख रहा था। धन्यवाद!

4
खबरदार है कि आप यूनिक्स (पीएसई) पर मौजूद प्रॉसेस लिस्ट के माध्यम से अपने यूजरनेम पासवर्ड का खुलासा करते हैं, लेकिन मुझे लगभग यकीन है कि यह विंडोज़ पर उसी तरह काम करता है
रॉबर्ट मर्कुवर्डिगेलिबे

3
stackoverflow.com/questions/1639704/… और dba.stackexchange.com/a/65064/16892 कमांड लाइन पर पासवर्ड का उपयोग न करने के कुछ तरीकों का वर्णन करें ...
rogerdpack

13

मुझे यह सबसे अच्छा समाधान लगता है और यह टर्मिनल में या स्क्रिप्ट के भीतर काम करता है:

echo @scriptname | sqlplus username/password@connect

1
हालांकि यह तकनीकी रूप से प्रश्न का उत्तर दे सकता है, लेकिन यह अन्य उत्तरों की एक डुप्लिकेट है और बहुत कम मूल्य जोड़ता है। इसके अलावा, यह दूसरों की मदद करेगा यदि आपने समझाया कि ये आदेश क्या कर रहे हैं। धन्यवाद!
क्रिस एस

5
यह मेरे लिए काम करता है और मुझे यह शीर्ष उत्तर की तुलना में अधिक सुरुचिपूर्ण लगता है क्योंकि यह 'बाहर निकलने' से बचता है।
बोगडान कैलमैक

12

अब यह महसूस करते हुए कि आपकी समस्या स्वयं sql फ़ाइल के साथ हो सकती है, महसूस करें कि sqlplus को बाहर निकलने के लिए कहा जाना चाहिए। जिस तरह से मैं यह कर रहा हूँ:

दोहरी से * का चयन करें;

छोड़;
/

(स्लैश महत्वपूर्ण है। यह sqlplus को इसके ऊपर स्थित राजमित्रों को निष्पादित करने के लिए कहता है।)


ध्यान दें कि डेव कोस्टा का जवाब भी काम करता है: sqlplus कमांड में पाइपिंग एग्जिट (या छोड़)।

/ ट्रिक के लिए धन्यवाद, मैं इस जानकारी की तलाश में था!

2
स्लैश का मतलब SQL बफर में जो है उसे निष्पादित करना है। यह कई बयानों को निष्पादित नहीं करता है, और SQLPlus नियंत्रण आदेशों को "छोड़ना" जैसे निष्पादित करना आवश्यक नहीं है। यदि आप एक इंटरैक्टिव SQLPlus प्रॉम्प्ट पर "छोड़ें" <Enter> टाइप करते हैं, तो यह तुरंत बाहर निकल जाएगा।
डेव कोस्टा

12

उपयोगकर्ता जानकारी और निकास को छिपाने का सबसे अच्छा तरीका है:

exit | sqlplus -S user/pwd@server @script.sql

exitइसे छोड़ने के लिए मजबूर करने के लिए sqlplus के आउटपुट को आपूर्ति की जाती है। -Sस्क्रिप्ट में सभी सर्वर आउटपुट को फिर sql क्वेरी से अलग करता है।


2
अगर ssh का उपयोग करना है तो पद छोड़ दें | बाहर निकलने के बजाय | यदि फ़ाइल बाद में बाहर निकलने के लिए संपादित हो या उसमें छोड़ दिया जाए तो यह आपके ssh सत्र को बंद नहीं करता है। यह काम करता है अगर फ़ाइल भी नहीं मिली है।
कार्ल हेन्सेलिन

6

आप इसे अपने शेल स्क्रिप्ट में भी कर सकते हैं।

sqlplus /nolog <<EOF
connect user/pass
@run_some_file.sql
select * from dual;
EOF

आप से बचने की आवश्यकता हो सकती है ";" के साथ \।


3

हां, यह संभव है - एक रैपर स्क्रिप्ट उत्पन्न करें जो SQLPlus को उचित रूप से सेट करता है, जिसमें आपकी स्क्रिप्ट (यानी। @YourTargetScript.sql) शामिल है, और फिर एक निकास करता है।

उस ने कहा, मैं इस दृष्टिकोण की सिफारिश बिल्कुल नहीं करता - SQLPlus में प्रोग्रामेटिक उपयोग के लिए बहुत सारे गोचर्स हैं; ओरेकल का उपयोग करने वाले अतीत में शेल स्क्रिप्ट लिखते समय, मैंने इसके चारों ओर एक पायथन रैपर बनाया (अधिक उचित त्रुटि से निपटने वाले व्यवहार को जोड़ते हुए, stdout / stderr, देशी CSV आउटपुट सपोर्ट और अन्य ऐसी अच्छाइयों के बीच आउटपुट को अलग किया), और यह काम किया काफी बेहतर।


किसी भी अन्य कार्यक्रम के साथ मैं आपसे सहमत हूँ। लेकिन मैंने पाया कि एसक्यूएलप्लस ने मुझे एक खराब क्वेरी पर उपयोगी संदर्भ दिया जो अन्य वातावरण (मेरे मामले में पर्ल / डीबीआई / डीबीडी :: ओरेकल) में नहीं था। यदि आप सावधानीपूर्वक त्रुटि को संभाल रहे हैं, तो यह दर्द के लायक हो सकता है।

इसके अलावा, आपके पास सर्वर पर कितना नियंत्रण है, इस पर निर्भर करते हुए, आप शेल और एसक्यूएलप्लस कुछ भी अधिक का लाभ लेने में सक्षम हो सकते हैं या नहीं। सोलारिस, एचपी / यूएक्स, एआईएक्स और इस तरह से चलने वाली बहुत सारी स्टोगियर यूनिक्स दुकानें बहुत नंगी इंस्टॉल का उपयोग करती हैं और आपको बॉक्स पर कुछ और स्थापित नहीं करने देंगी। ध्यान दें कि कभी-कभी इसके लिए वर्कअराउंड सिर्फ अपने आवेदन के साथ एक न्यूनतम दुभाषिया बंडल करना है।
ConcernedOfTunbridgeWells

3

ऐशे ही:

sqlplus / nolog userid / password @ tnsname @filename

यदि आप इसे एक बैच फ़ाइल में रखते हैं, तो नियंत्रण कथन के साथ जारी रहेगा।

संपादित करें: मेरा बुरा, फिर से कोशिश करें / झंडे के साथ


दुर्भाग्य से, यह काम नहीं करता है। जब मैं बैच फ़ाइल निष्पादित करता हूं, SqlPlus कमांड प्रॉम्प्ट पर नियंत्रण वापस करने के बजाय उपयोगकर्ता इनपुट के लिए SQL> प्रॉम्प्ट पर प्रतीक्षा करता है।
जोश

क्षमा करें, यह भी काम नहीं करता है। / nolog लॉग ऑन किए बिना sqlplus को शुरू करने की अनुमति देता है। जब यह पूरा हो जाता है तो इसका किसी स्क्रिप्ट से कोई लेना-देना नहीं है।
जोश

हम्म, मैं पर्यावरण के मतभेदों के बारे में आश्चर्य करना शुरू कर रहा हूं। मेरे पास कई बैट स्क्रिप्ट हैं जो इस तरह से sqlplus का उपयोग करते हैं।

क्रिस, क्या आप एक काम का उदाहरण दे सकते हैं? बस कुछ आसान है जो "दोहरे से" का चयन करता है "या कुछ और" ... मैंने आपके सुझावों को आज़माने के लिए उदाहरण बनाए हैं, कोई फायदा नहीं हुआ। याद रखें कि यह विंडोज पर है।
जोश

जोश, नीचे नया जवाब देखें।

1

स्क्रिप्ट में आपके पासवर्ड को शामिल करने की सुरक्षा से चिंतित लोगों के लिए, AskTom के पास "बाहरी रूप से पहचाने गए" http: //asktom.oracle.com/pls/apex/f? P = 100: 11: 0 :::: के बारे में एक लेख है। P11_QUESTION_ID: 142,212,348,066


2
जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
स्कॉट पैक

0

अपने SQL स्क्रिप्ट में EXIT जोड़ें। यहाँ उदाहरण मेरे test.bat फ़ाइल के बाद है:

sqlplus उपयोगकर्ता / pwd @ सर्वर @ test.SQL> myLOG.LOG

मेरी test.sql फ़ाइल में निम्नलिखित हैं: दोहरे से * चयन करें; बाहर जाएं


यह ठीक है, लेकिन बाहर निकलने / छोड़ने के बयान को शामिल करने के लिए स्क्रिप्ट को संशोधित किए बिना ऐसा करने की आवश्यकता को पूरा नहीं करता है। आशय यह है कि इन लिपियों को SQL प्लस से DBA द्वारा चलाया जा सकता है, लेकिन एक बैच फ़ाइल से भी चलाया जा सकता है।
जोश

0

बाहर निकलना | SQLPLUS / @ @

यह सही समाधान है, मैंने कोशिश की है कि यह काम कर रहा है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.