سؤال قم بتشغيل البرنامج النصي لـ Oracle SQL والخروج من sqlplus.exe عبر موجه الأوامر


أرغب في تشغيل برنامج Oracle من خلال SQL Plus عبر موجه أوامر Windows. لا يحتوي البرنامج النصي على أمر "exit" ، لكنني مازلت أرغب في إنهاء SQL Plus ، وإرجاع التحكم إلى موجه الأوامر عند إكمال البرنامج النصي. هدفي هو القيام بذلك بدون تعديل البرنامج النصي. هل هذا ممكن؟


101
2017-09-22 23:33


الأصل


هل تنفيذ هذا مع "sqlplus .... <scriptname" أو "sqlplus ...scriptname" ؟؟ أجد سلوكيات مختلفة اعتمادًا على السلوك الذي تقوم به على Unix. - runrig


الأجوبة:


طريقة أخرى هي استخدام هذا الأمر في الملف الدفعي:

echo exit | sqlplus user/pass@connect @scriptname

128
2017-09-23 12:28



رائع! هل تعرف كيف يتم إلحاق "الخروج" إلى جلسة sqlplus؟
يعمل الأمر sqlplus البرنامج النصي ثم يحاول قراءة المزيد من الأوامر من الإدخال القياسي. باستخدام خط الأنابيب هذا ، تقرأ القراءة من الإدخال القياسي السلسلة "exit" من الأمر echo ، مما يؤدي إلى إنهاء sqlplus. - Dave Costa
ممتاز - هذا هو بالضبط ما كنت أبحث عنه. شكر! - JoshL
احذر من أن تعرض كلمة مرور اسم المستخدم الخاص بك من خلال قائمة المقتطفات على unix (ps -ef) ولكني متأكد من أنها تعمل بنفس الطريقة على النوافذ - Robert Merkwürdigeliebe
stackoverflow.com/questions/1639704/... و dba.stackexchange.com/a/65064/16892 وصف بعض الطرق لعدم الحاجة إلى استخدام كلمة المرور على سطر الأوامر ... - rogerdpack


لقد وجدت أن هذا هو الحل الأفضل وأنه يعمل في محطة أو داخل نص:

echo @scriptname | sqlplus username/password@connect

12
2017-10-26 12:21



في حين أن هذا قد يجيب من الناحية الفنية على السؤال ، إلا أنه يمثل تكرارًا جوهريًا للأجوبة الأخرى ويضيف قيمة ضئيلة. أيضا ، من شأنه أن يساعد الآخرين إذا شرحت ما تقوم به هذه الأوامر. شكرا لكم! - Chris S
لقد عمل هذا بالنسبة لي وأجده أكثر أناقة من الإجابة الأعلى لأنه يتجنب "الخروج". - Bogdan Calmac


أفضل طريقة لإخفاء معلومات المستخدم ومخارجه هي:

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

exit يتم توفير إخراج sqlplus إجبارها على الإقلاع. -S suprresses كل خادم الإخراج الأخرى ثم استعلام SQL في البرنامج النصي.


12
2018-03-18 21:20



إذا كان استخدام ssh هو القيام بالخروج بدلا من الخروج | بحيث لا تغلق جلسة ssh الخاصة بك إذا تم تحرير الملف في وقت لاحق للخروج أو إنهاء فيه. هذا يعمل إذا لم يتم العثور على الملف أيضا. - Karl Henselin


إدراك الآن أن مشكلتك قد تكون مع ملف sql نفسه ، ندرك أن sqlplus يحتاج إلى أن يقال للخروج. الطريقة التي أقوم بها هي:

اختر * من ثنائي

استقال؛
/

(الخط المائل مهم. فهو يخبر sqlplus بتنفيذ statemet (s) فوقه.)


11
2017-09-23 16:04



لاحظ أن إجابة Dave Costa تعمل أيضًا: خروج الانطلاق (أو الإقلاع) في أمر sqlplus.
شكرا على / خدعة ، كنت أبحث عن هذه المعلومات!
المائل تعني تنفيذ ما هو موجود في المخزن المؤقت SQL. لا تنفذ عبارات متعددة ، وليس من الضروري تنفيذ أوامر التحكم SQLPlus مثل "إنهاء". إذا كتبت "إنهاء" <Enter> في موجه SQLPlus تفاعلي ، فإنه سيتم إنهاء فوراً. - Dave Costa


يمكنك أيضًا القيام بذلك في البرنامج النصي shell الخاص بك.

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

قد تحتاج للهروب من "؛" مع \.


6
2017-09-23 12:33





مثله:

sqlplus / nolog userid / password @ tnsnamefilename

إذا وضعت هذا في ملف دفعي ، سيستمر عنصر التحكم في العبارة (العبارات) التالية له.

تعديل: سيئ ، حاول مرة أخرى باستخدام علم nolog


4
2017-09-22 23:43



لسوء الحظ ، هذا لا يعمل. عند تنفيذ الملف الدفعي ، ينتظر SqlPlus في SQL> مطالبة لإدخال المستخدم بدلاً من إرجاع التحكم إلى موجه الأوامر. - JoshL
عذرا ، هذا لا يعمل سواء. يسمح / nolog ببدء sqlplus دون تسجيل الدخول. لا علاقة له بخروج النص عندما يكتمل. - JoshL
أنا بدأت أتساءل عن الاختلافات البيئية. لدي العديد من مخطوطات الخفافيش التي تستخدم sqlplus بهذه الطريقة.
كريس ، هل يمكنك تقديم مثال عملي؟ مجرد شيء بسيط يدير "حدد * من ثنائي" أو شيء ... لقد قمت بإنشاء أمثلة لتجربة اقتراحاتك ، ولكن دون جدوى. تذكر أن هذا هو على ويندوز. - JoshL
جوش ، انظر إجابة جديدة أدناه.


نعم ، من الممكن - إنشاء البرنامج النصي المجمع الذي يقوم بإعداد SQLPlus بشكل مناسب ، ويشمل البرنامج النصي الخاص بك (أي @YourTargetScript.sql) ، ومن ثم الخروج.

ومع ذلك ، لا أوصي بهذا الأسلوب على الإطلاق - يحتوي SQLPlus على العديد من gotchas للاستخدام البرمجي ؛ عند كتابة مخطوطات shell في الماضي التي استخدمت Oracle ، قمت ببناء غلاف Python حوله (إضافة المزيد من سلوك معالجة الأخطاء المعقولة ، الفصل العاقل بين الإخراج stdout / stderr ، دعم إخراج CSV الأصلي ، وغيرها من الأشياء الجيدة الأخرى) ، والتي عملت أفضل بكثير.


3
2017-09-22 23:40



مع أي برنامج آخر ، أود أن أتفق معك. ولكن وجدت أن SQLPlus أعطاني سياق مفيد على استعلام سيئة أن البيئات الأخرى (في حالتي Perl / DBI / DBD :: Oracle) لم يفعل ذلك. إذا كنت تتعامل مع الأخطاء بحذر ، يمكن أن يكون ذلك يستحق الألم.
أيضا ، اعتمادا على مقدار السيطرة لديك على الخادم ، قد تكون أو لا تكون قادرة على افتراض وجود أي شيء أكثر من قذيفة و SQLPlus. الكثير من محلات يونيكس الأكثر شعبية في سولاريس و HP / UX و AIX وغير ذلك تستخدم أجهزة تثبيت عارية ولن تسمح لك بتثبيت أي شيء آخر على العلبة. لاحظ أنه في بعض الأحيان ، يكون حل هذه المشكلة مجرد تجميع مترجم صغير مع تطبيقك. - ConcernedOfTunbridgeWells


لأولئك القلقين حول أمان تضمين كلمة المرور الخاصة بك في البرنامج النصي ، يحتوي AskTom على مقالة حول "تم تعريفه خارجيًا" http://asktom.oracle.com/pls/apex/f؟p=100:11:0::::P11_QUESTION_ID:142212348066


1
2017-07-16 19:38



في حين أن هذا قد يكون من الناحية النظرية الإجابة على السؤال ، سيكون من الأفضل لتشمل الأجزاء الأساسية من الإجابة هنا ، وتوفير الرابط كمرجع. - Scott Pack