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

114

Saya ingin menjalankan skrip Oracle melalui SQL Plus melalui prompt perintah Windows. Script tidak mengandung perintah "keluar", tapi saya masih ingin SQL Plus untuk keluar, mengembalikan kontrol ke command prompt pada penyelesaian skrip. Tujuan saya adalah melakukan ini tanpa memodifikasi skrip. Apakah ini mungkin?

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

Jawaban:

140

Cara lain adalah dengan menggunakan perintah ini dalam file batch:

echo exit | sqlplus user/pass@connect @scriptname
Dave Costa
sumber
1
Keren! Anda tahu bagaimana "keluar" ditambahkan ke sesi sqlplus?
6
Perintah sqlplus menjalankan skrip kemudian mencoba membaca lebih banyak perintah dari input standar. Dengan pipa ini, pembacaan dari input standar akan membaca string "keluar" dari perintah gema, menyebabkan sqlplus keluar.
Dave Costa
Luar biasa - inilah yang saya cari. Terima kasih!
JoshL
4
Berhati-hatilah bahwa Anda mengekspos kata sandi nama pengguna Anda melalui daftar proses pada unix (ps -ef) tapi saya hampir yakin itu bekerja dengan cara yang sama pada windows
Robert Merkwürdigeliebe
3
stackoverflow.com/questions/1639704/… dan dba.stackexchange.com/a/65064/16892 menjelaskan beberapa cara untuk tidak harus menggunakan kata sandi pada baris perintah ...
rogerdpack
13

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

echo @scriptname | sqlplus username/password@connect
pengguna142847
sumber
1
Meskipun ini secara teknis dapat menjawab Pertanyaan, ini pada dasarnya merupakan duplikat dari Jawaban lain dan menambahkan sedikit nilai. Juga, itu akan membantu orang lain jika Anda menjelaskan apa yang dilakukan perintah-perintah ini. Terima kasih!
Chris S
5
Ini bekerja untuk saya dan saya merasa lebih elegan daripada jawaban teratas karena itu menghindari 'keluar'.
Bogdan Calmac
12

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

pilih * dari ganda;

berhenti;
/

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

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

Cara terbaik untuk menyembunyikan informasi dan keluar pengguna adalah:

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

exitdisuplai ke output sqlplus yang memaksanya untuk keluar. -Smenekan semua output server selain kueri sql dalam skrip.

girish
sumber
2
Jika menggunakan ssh adalah dengan melakukan exit | 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
6

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 \.

Ethan Post
sumber
3

Ya, itu mungkin - buat skrip wrapper yang mengatur SQLPlus dengan tepat, sertakan skrip Anda (mis. @YourTargetScript.sql), Lalu lakukan jalan keluar.

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

Charles Duffy
sumber
Dengan program lain saya akan setuju dengan Anda. TETAPI saya menemukan bahwa SQLPlus memberi saya konteks yang berguna pada kueri buruk yang tidak dimiliki lingkungan lain (dalam kasus saya Perl / DBI / DBD :: Oracle) tidak. Jika Anda melakukan penanganan kesalahan dengan hati-hati, itu tidak sia-sia.
Juga, tergantung pada seberapa banyak kontrol yang Anda miliki atas server, Anda mungkin atau mungkin tidak dapat mengasumsikan tersedia apa pun selain shell dan SQLPlus. Banyak toko unix yang menjalankan Solaris, HP / UX, AIX dan sejenisnya menggunakan instalasi yang sangat telanjang dan tidak akan membiarkan Anda menginstal apa pun di dalam kotak. Perhatikan bahwa kadang-kadang solusi untuk ini adalah hanya dengan bundel juru bahasa minimal dengan aplikasi Anda.
ConcernedOfTunbridgeWells
3

Seperti ini:

sqlplus / nolog userid / password @ tnsname @filename

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

EDIT: Maaf, coba lagi dengan / nolog flag

Chris Noe
sumber
Sayangnya, ini tidak berhasil. Ketika saya menjalankan file batch, SqlPlus menunggu di prompt SQL> untuk input pengguna alih-alih mengembalikan kontrol ke prompt perintah.
JoshL
Maaf, ini juga tidak berfungsi. / nolog memungkinkan sqlplus untuk memulai tanpa masuk. Itu 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, dapatkah Anda memberikan contoh kerja? Hanya sesuatu yang sederhana yang menjalankan "pilih * dari dua" atau sesuatu ... Saya telah membuat contoh untuk mencoba saran Anda, tetapi tidak berhasil. Ingat bahwa ini ada di Windows.
JoshL
Josh, lihat jawaban baru di bawah ini.
1

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

pengguna128494
sumber
2
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Scott Pack
0

Dalam SQL Script Anda tambahkan EXIT. Berikut ini contoh file test.bat saya sebagai berikut:

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

file test.sql saya telah mengikuti: pilih * dari ganda; keluar


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

keluar | SQLPLUS / @ @

Ini adalah solusi yang tepat, saya sudah mencoba itu berfungsi


sumber