2017-12-20 8 views
1

Gibt es eine Möglichkeit, mehrere sqlplus-Befehle innerhalb einer Schleife zu senden, aber darauf zu warten, dass einer mit Erfolg läuft, damit der nächste startet? Hier ist ein Beispiel meines Codes. Ich habe versucht, diesen Schlaf 15 hinzuzufügen, weil die Funktionen, die ich ausführen werde, ungefähr 10-20s dauern, um zu laufen. Ich möchte diese 15s Konstante loswerden und sie nacheinander laufen lassen.sqlplus innerhalb einer Schleife - unix

if [ "$#" -eq 1 ]; then 
    checkUser "$1" 
    while read line; do 
    sqlplus $user/[email protected]$server $line 
    sleep 15 
    done < "$wrapperList" 
fi 
+0

Oh, ich dachte, es würde sqlplus-Befehle parallel senden. Es ist nur eine Liste von .SQL-Dateien, die im sqlplus-Befehl verwendet werden. Habe es nicht versucht, das war meine erste Annahme. Ich werde es versuchen und ich werde mit einer Antwort zurückkommen. Vielen Dank –

Antwort

1

Die Anweisungen in einer while Schleife werden nacheinander ausgeführt. Es wäre gleichbedeutend wie das zu tun, ; Ketten Anweisungen mit:

sqlplus $user/[email protected]$server $line1 
sqlplus $user/[email protected]$server $line2 

So Sie nicht die sleep 15 brauchen hier, da die sqlplus Befehle nicht parallel aufgerufen werden. So wie du es bereits getan hast, rufst du sie nacheinander an.

Nota: Es ist sogar noch besser laufen zu stoppen, wenn erste Zeile nicht korrekt zurückkehrte, && mit sagen: nur ausgeführt, wenn vorherigem Rückgabecode ist 0

sqlplus $user/[email protected]$server $line1 &&\ 
sqlplus $user/[email protected]$server $line2 

dies in der while-Schleife zu haben:

checkUser "$1" 
    while read line; do 
    sqlplus $user/[email protected]$server $line 
    RET_CODE=$? # check return code, and break if not ok. 
    if [ ${RET_CODE} != 0 ]; then 
     echo "aborted." ; break 
    fi 
    done < "$wrapperList" 

auf der anderen Seite, Wenn Sie parallel ausgeführt werden sollen, die Syntax ist anders, wie hier: Unix shell script run SQL scripts in parallel

Verwandte Themen