Soru Oracle SQL komut dosyasını çalıştırın ve komut isteminden sqlplus.exe aracından çıkın


Bir Windows komut istemiyle SQL Plus aracılığıyla bir Oracle betiğini çalıştırmak istiyorum. Komut dosyası bir "çıkış" komutu içermiyor, ancak SQL Plus'ın çıkmasını ve komut dosyasının tamamlanmasının ardından komut istemine kontrolün geri dönmesini istiyorum. Amacım bunu yapmak olmadan komut dosyasını değiştirmek. Mümkün mü?


101
2017-09-22 23:33


Menşei


Bunu "sqlplus .... <scriptname" veya "sqlplus ... @scriptname" ile çalıştırıyor musunuz? Unix'te yaptığınıza göre farklı davranışlar buluyorum. - runrig


Cevaplar:


Başka bir yöntem, bu komutu toplu iş dosyasında kullanmaktır:

echo exit | sqlplus user/pass@connect @scriptname

128
2017-09-23 12:28



Güzel! "çıkış" ın sqlplus oturumuna nasıl ekleneceğini biliyor musunuz?
Sqlplus komutu komut dosyasını çalıştırır ve daha sonra standart girdiden daha fazla komut okumaya çalışır. Bu boru hattı ile, standart girişten okunan, echo komutundan "çıkış" dizesini okuyarak sqlplus'un çıkmasını sağlar. - Dave Costa
Mükemmel - bu tam olarak aradığım şey. Teşekkürler! - JoshL
Unix (ps -ef) üzerindeki işlem listesi üzerinden kullanıcı adı parolanızı gösterdiğinizden emin olun, ancak windows üzerinde aynı şekilde çalıştığından neredeyse eminim - Robert Merkwürdigeliebe
stackoverflow.com/questions/1639704/... ve dba.stackexchange.com/a/65064/16892 Komut satırında şifre kullanmak zorunda kalmamak için bazı yolları açıklayın ... - rogerdpack


Bunu en iyi çözüm olarak buldum ve bir terminalde ya da bir senaryo içinde çalışıyor:

echo @scriptname | sqlplus username/password@connect

12
2017-10-26 12:21



Bu teknik soruya teknik olarak cevap verebilirken, diğer cevapların büyük bir kopyasıdır ve çok az değer katmaktadır. Ayrıca, bu komutların ne yaptığını açıklarsanız başkalarına yardımcı olur. Teşekkür ederim! - Chris S
Bu benim için çalıştı ve ben onu en iyi cevaptan daha zarif buluyorum çünkü 'çıkış' dan kaçınıyor. - Bogdan Calmac


Kullanıcı bilgilerini ve çıkışları saklamanın en iyi yolu şudur:

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

exit sqlplus çıktısına zorlamak için çıkışa verilir. -S Komut dosyasındaki diğer tüm sunucu çıktısını sonra sql sorgularını destekler.


12
2018-03-18 21:20



Eğer ssh kullanmaktan vazgeçmek | çıkış yerine | Böylece ssh oturumunuzu kapatmazsa, dosya daha sonra bir çıkışa sahip olacak veya çıkacaktır. Bu dosya da bulunamadıysa çalışır. - Karl Henselin


Artık sorununun sql dosyasının kendisi ile olabileceğini fark ederek, sqlplus'un çıkması gerektiği söylenmelidir. Bunu yapmamın yolu:

çiftten * seç;

çıkın;
/

(Eğik çizgi önemlidir. Sqlplus'a yukarıdaki statemet (ler) ini yürütmesini söyler.)


11
2017-09-23 16:04



Dave Costa'nın cevabının da işe yaradığını unutmayın: sqlplus komutuna boru çıkışı (veya çıkma).
Teşekkürler / hile için bu bilgiyi arıyordum!
Eğik çizgi, SQL arabelleğinde olanı yürütmek anlamına gelir. Birden çok ifade yürütmez ve "bırakma" gibi SQLPlus denetim komutlarını çalıştırmak gerekli değildir. Etkileşimli bir SQLPlus isteminde "quit" <Enter> yazarsanız hemen çıkacaktır. - Dave Costa


Bunu ayrıca kabuk betiğinizde de yapabilirsiniz.

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

";" Dan kaçmak gerekebilir Birlikte \.


6
2017-09-23 12:33





Bunun gibi:

sqlplus / nolog userid / password @ tnsname @ dosya adı

Bunu bir toplu iş dosyasına koyarsanız, denetim, onu takip eden ifadeler ile devam edecektir.

EDIT: Kötü, / nolog bayrağı ile tekrar deneyin


4
2017-09-22 23:43



Ne yazık ki, bu işe yaramıyor. Toplu iş dosyasını yürüttüğümde, SqlPlus komut istemine kontrolü geri almak yerine SQL> kullanıcı girdisi isteminde bekler. - JoshL
Üzgünüm, bu da işe yaramıyor. / nolog, sqlplus'ın oturum açmadan başlamasına izin verir. Tamamlandığında bir komut dosyasından çıkılmasıyla ilgisi yoktur. - JoshL
Hmm, çevre farklılıklarını merak etmeye başlıyorum. Bu şekilde sqlplus kullanan çok sayıda yarasa betiği var.
Chris, çalışan bir örnek verebilir misin? Sadece “select * from dual” ya da bir şey çalıştıran basit bir şey… Önerilerinizi denemek için örnekler hazırladım, boşuna. Bunun Windows'da olduğunu unutmayın. - JoshL
Josh, aşağıya yeni cevap gör.


Evet, mümkün - SQLPlus'u uygun şekilde ayarlayan bir betik betiği oluşturun, komut dosyanızı (ör. @YourTargetScript.sql) ve sonra bir çıkış yapar.

Bununla birlikte, bu yaklaşımı hiç önermiyorum - SQLPlus programlı kullanım için çok fazla sayıda yakalamaya sahip; Oracle'ın kullandığı geçmişte kabuk betikleri yazılırken, etrafına bir Python sarıcısı ekledim (daha mantıklı bir hata işleme davranışı ekledim, stdout / stderr, yerel CSV çıktı desteği ve diğer benzer hediyeler arasındaki çıktıyı aklınızda tutacağım) ve çok daha iyi.


3
2017-09-22 23:40



Başka bir programla seninle aynı fikirdeyim. AMA SQLPlus bana diğer ortamlarda (benim durumumda, Perl / DBI / DBD :: Oracle) hatalı bir sorgu üzerinde yararlı bir içerik verdiğini buldum. Dikkatli bir hata işleme yapıyorsanız, bu acıya değer olabilir.
Ayrıca, sunucu üzerinde ne kadar kontrole sahip olduğunuza bağlı olarak, kabuk ve SQLPlus'tan daha fazlası olan bir şey varsayabilir veya olmayabilir. Solaris, HP / UX, AIX gibi pek çok stogier unix mağazası ve çok benzer kurulumlar çok basit kurulumlar yapıyor ve kutuya başka bir şey yüklemenize izin vermeyecek. Bazen bunun bir çözümü, uygulamanızla en az bir yorumlayıcıyı bir araya getirmektir. - ConcernedOfTunbridgeWells


Parolanızdaki parolanızı eklemenin güvenliği konusunda endişelenenler için, AskTom'un "harici olarak tanımlanmış" ile ilgili bir makalesi var. http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:142212348066


1
2017-07-16 19:38



Bu teorik olarak soruyu cevaplayabilirken, tercih edilirdi Burada cevabın önemli kısımlarını dahil etmek ve referans için bağlantıyı sağlamak. - Scott Pack


SQL Komut Dosyasına EXIT ekleyin. İşte örnek benim test.bat dosyam aşağıdakileri içeriyor:

sqlplus kullanıcısı / pwd @ server @ test.SQL> myLOG.LOG

benim test.sql dosyası aşağıdakileri içeriyor: çiftten * seç; çıkış


0
2018-06-19 20:40



Bu iyi, ancak bir çıkış / çıkış deyimi içerecek şekilde komut dosyasını değiştirmeden bunu yapma gereğini karşılamıyor. Amaç, bu komut dosyalarının SQL Plus'tan bir DBA tarafından çalıştırılabilmesidir, ancak aynı zamanda bir toplu iş dosyasından da çalıştırılabilir. - JoshL


çıkış | SQLPLUS / @ @

Bu doğru çözüm, çalıştığını denedim


0
2017-11-20 06:57