Pertanyaan Jalankan Oracle SQL script dan keluar dari sqlplus.exe melalui command prompt


Saya ingin menjalankan skrip Oracle melalui SQL Plus melalui command prompt Windows. Skrip tidak berisi perintah "keluar", tetapi saya masih ingin SQL Plus keluar, mengembalikan kontrol ke prompt perintah setelah menyelesaikan skrip. Tujuan saya adalah melakukan ini tanpa memodifikasi skrip. Apakah ini mungkin?


101
2017-09-22 23:33




Apakah Anda mengeksekusi ini dengan "sqlplus .... <scriptname" atau "sqlplus ... @scriptname" ?? Saya menemukan perilaku yang berbeda tergantung mana yang Anda lakukan di Unix. - runrig


Jawaban:


Cara lain adalah dengan menggunakan perintah ini dalam file batch:

echo exit | sqlplus user/pass@connect @scriptname

128
2017-09-23 12:28



Keren! apakah Anda tahu bagaimana "exit" akan ditambahkan ke sesi sqlplus?
Perintah sqlplus menjalankan skrip kemudian mencoba membaca lebih banyak perintah dari input standar. Dengan pipa ini, bacaan dari input standar akan membaca string "exit" dari perintah echo, menyebabkan sqlplus untuk keluar. - Dave Costa
Luar biasa - inilah yang saya cari. Terima kasih! - JoshL
Berhati-hatilah agar Anda mengekspos kata sandi nama pengguna Anda melalui daftar proces di unix (ps -ef) tapi saya hampir yakin itu bekerja dengan cara yang sama pada windows - Robert Merkwürdigeliebe
stackoverflow.com/questions/1639704/… dan dba.stackexchange.com/a/65064/16892 jelaskan beberapa cara untuk tidak perlu menggunakan kata sandi pada baris perintah ... - rogerdpack


Saya menemukan ini sebagai solusi terbaik dan berfungsi di terminal atau dalam skrip:

echo @scriptname | sqlplus username/password@connect

12
2017-10-26 12:21



Meskipun ini mungkin secara teknis menjawab Pertanyaan, ini secara substansial merupakan duplikat dari Jawaban lain dan menambahkan sedikit nilai. Juga, ini akan membantu orang lain jika Anda menjelaskan apa yang sedang dilakukan oleh perintah ini. Terima kasih! - Chris S
Ini berhasil bagi saya dan saya merasa lebih elegan daripada jawaban atas karena ia menghindari 'keluar'. - Bogdan Calmac


Cara terbaik untuk menyembunyikan informasi pengguna dan keluar adalah:

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

exit dipasok ke output dari sqlplus memaksanya untuk berhenti. -S suprresses semua output server lain kemudian permintaan sql dalam skrip.


12
2018-03-18 21:20



Jika menggunakan ssh berarti berhenti | bukannya keluar | sehingga tidak menutup sesi ssh Anda jika file tersebut diedit nanti untuk keluar atau berhenti di dalamnya. Ini berfungsi jika file tidak ditemukan juga. - Karl Henselin


Menyadari sekarang bahwa masalah Anda mungkin dengan file sql itu sendiri, menyadari bahwa sqlplus perlu diberitahu untuk keluar. Cara saya melakukan ini adalah:

pilih * dari dual;

berhenti;
/

(Slash itu penting. Ini memberitahu sqlplus untuk menjalankan statemet di atasnya.)


11
2017-09-23 16:04



Perhatikan bahwa jawaban Dave Costa juga berfungsi: pemipaan keluar (atau keluar) ke perintah sqlplus.
Terima kasih atas / tricknya, saya mencari informasi ini!
Slash berarti mengeksekusi apa yang ada di buffer SQL. Itu tidak mengeksekusi beberapa pernyataan, dan itu tidak perlu untuk mengeksekusi perintah kontrol SQLPlus seperti "berhenti". Jika Anda mengetik "quit" <Enter> pada prompt SQLPlus interaktif, itu akan segera keluar. - Dave Costa


Anda juga dapat melakukan ini di skrip shell Anda.

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

Anda mungkin perlu melarikan diri dari ";" dengan \.


6
2017-09-23 12:33





Seperti ini:

sqlplus / nolog userid / password @ tnsname @filename

Jika Anda menempatkan ini dalam file batch, kontrol akan dilanjutkan dengan pernyataan yang mengikutinya.

EDIT: My bad, coba lagi dengan bendera / nolog


4
2017-09-22 23:43



Sayangnya, ini tidak berhasil. Ketika saya menjalankan file batch, SqlPlus menunggu di SQL> prompt untuk input pengguna bukannya mengembalikan kontrol ke command prompt. - JoshL
Maaf, ini juga tidak berhasil. / nolog memungkinkan sqlplus untuk memulai tanpa login. Ini tidak ada hubungannya dengan keluar dari skrip ketika selesai. - JoshL
Hmm, saya mulai bertanya-tanya tentang perbedaan lingkungan. Saya memiliki banyak skrip kelelawar yang menggunakan sqlplus dengan cara ini.
Chris, bisakah Anda memberikan contoh kerja? Hanya sesuatu yang sederhana yang menjalankan "pilih * dari dual" atau sesuatu ... Saya telah membuat contoh untuk mencoba saran Anda, tidak berhasil. Ingat bahwa ini ada di Windows. - JoshL
Josh, lihat jawaban baru di bawah ini.


Ya, itu mungkin - menghasilkan skrip pembungkus yang membuat SQLPlus tepat, termasuk skrip Anda (mis. @YourTargetScript.sql), dan kemudian melakukan jalan keluar.

Yang mengatakan, saya tidak merekomendasikan pendekatan ini sama sekali - SQLPlus memiliki banyak sekali getchas untuk penggunaan terprogram; saat menulis skrip shell di masa lalu yang menggunakan Oracle, saya membangun pembungkus Python di sekitarnya (menambahkan lebih banyak perilaku penanganan kesalahan yang masuk akal, pemisahan output antara stdout / stderr, dukungan output CSV asli, dan barang serupa lainnya), dan itu berhasil jauh lebih baik.


3
2017-09-22 23:40



Dengan program lain saya akan setuju dengan Anda. TAPI saya menemukan bahwa SQLPlus memberi saya konteks yang berguna pada pertanyaan yang buruk bahwa lingkungan lain (dalam kasus saya Perl / DBI / DBD :: Oracle) tidak. Jika Anda melakukan penanganan kesalahan secara hati-hati, itu bisa jadi sepadan dengan rasa sakit.
Juga, tergantung pada seberapa banyak kendali yang Anda miliki atas server, Anda mungkin atau mungkin tidak dapat mengasumsikan ketersediaan apa pun lebih dari shell dan SQLPlus. Banyak toko unix yang lebih kaku yang menjalankan Solaris, HP / UX, AIX, dan semacamnya, sangat jarang menginstal dan tidak akan membiarkan Anda menginstal yang lain di kotak. Perhatikan bahwa kadang-kadang solusi untuk ini hanya untuk menggabungkan interpreter minimal dengan aplikasi Anda. - ConcernedOfTunbridgeWells


Bagi mereka yang khawatir tentang keamanan termasuk kata sandi Anda dalam skrip, AskTom memiliki artikel tentang "diidentifikasi secara eksternal" http://asktom.oracle.com/pls/apex/f?p=100:11shared::::P11_QUESTION_ID:142212348066


1
2017-07-16 19:38



Sementara ini secara teoritis dapat menjawab pertanyaan itu, itu akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan berikan tautan sebagai referensi. - Scott Pack


Di skrip SQL Anda, tambahkan EXIT. Berikut ini contohnya file test.bat saya memiliki berikut:

sqlplus pengguna / pwd @ server @ test.SQL> myLOG.LOG

file test.sql saya memiliki berikut: pilih * dari dual; keluar


0
2018-06-19 20:40



Itu bagus, tetapi tidak memenuhi persyaratan untuk melakukan ini tanpa memodifikasi skrip untuk menyertakan pernyataan keluar / berhenti. Maksudnya adalah skrip ini dapat dijalankan oleh DBA dari SQL Plus, tetapi juga dapat dijalankan dari file batch. - JoshL


keluar | SQLPLUS / @ @

Ini adalah solusi yang tepat, saya sudah mencobanya


0
2017-11-20 06:57