Vraag Voer het Oracle SQL-script uit en sluit sqlplus.exe af via de opdrachtprompt


Ik wil graag een Oracle-script uitvoeren via SQL Plus via een Windows-opdrachtprompt. Het script bevat geen "exit" -opdracht, maar ik zou graag willen dat SQL Plus wordt afgesloten, waarbij de controle terugkeert naar de opdrachtprompt nadat het script is voltooid. Mijn doel is om dit te doen zonder het aanpassen van het script. Is dit mogelijk?


101
2017-09-22 23:33


oorsprong


Voer je dit uit met "sqlplus .... <scriptnaam" of "sqlplus ... @scriptnaam" ?? Ik vind verschillende gedragingen, afhankelijk van degene die je op Unix doet. - runrig


antwoorden:


Een andere manier is om deze opdracht in het batchbestand te gebruiken:

echo exit | sqlplus user/pass@connect @scriptname

128
2017-09-23 12:28



Stoer! weet u hoe de "exit" wordt toegevoegd aan de sqlplus-sessie?
De opdracht sqlplus voert het script uit en probeert vervolgens meer opdrachten van de standaardinvoer te lezen. Met deze pijplijn leest de gelezen standaardinvoer de tekenreeks "exit" uit het echo-commando, waardoor sqlplus wordt afgesloten. - Dave Costa
Uitstekend - dit is precies wat ik zocht. Bedankt! - JoshL
Pas op dat je je gebruikersnaamwachtwoord blootgeeft via de proceslijst op unix (ps -ef) maar ik ben er bijna zeker van dat het op dezelfde manier werkt op Windows - Robert Merkwürdigeliebe
stackoverflow.com/questions/1639704/... en dba.stackexchange.com/a/65064/16892 beschrijf enkele manieren om geen wachtwoord te hoeven gebruiken op de opdrachtregel ... - rogerdpack


Ik vond dit de beste oplossing en het werkt in een terminal of in een script:

echo @scriptname | sqlplus username/password@connect

12
2017-10-26 12:21



Hoewel dit de vraag technisch kan beantwoorden, is het in wezen een duplicaat van andere antwoorden en voegt het weinig waarde toe. Ook zou het anderen helpen als je uitgelegd hebt wat deze commando's aan het doen zijn. Dank je! - Chris S
Dit werkte voor mij en ik vind het eleganter dan het beste antwoord omdat het 'exit' vermijdt. - Bogdan Calmac


De beste manier om gebruikersinformatie en exits te verbergen is:

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

exit wordt geleverd aan de uitvoer van sqlplus, waardoor het wordt gedwongen te stoppen. -S onderdrukt alle serveroutput anders dan sql-query in het script.


12
2018-03-18 21:20



Als het gebruik van ssh is om te stoppen | in plaats van exit | zodat het je SSH-sessie niet sluit als het bestand later wordt bewerkt om een ​​exit te hebben of te stoppen. Dit werkt als het bestand ook niet wordt gevonden. - Karl Henselin


Als u nu beseft dat uw probleem mogelijk met het sql-bestand zelf is, beseft u dat sqlplus moet worden verteld om af te sluiten. De manier waarop ik dit doe is:

selecteer * uit dubbel;

stoppen;
/

(De schuine streep is belangrijk, hij vertelt sqlplus om de statemet (s) erboven uit te voeren.)


11
2017-09-23 16:04



Merk op dat het antwoord van Dave Costa ook werkt: piping exit (of stop) in de opdracht sqlplus.
Bedankt voor de / trick, ik was op zoek naar deze informatie!
De schuine streep betekent om uit te voeren wat zich in de SQL-buffer bevindt. Het voert geen meerdere instructies uit en het is niet nodig om SQLPlus-besturingsopdrachten zoals "quit" uit te voeren. Als u "quit" <Enter> typt bij een interactieve SQLPlus-prompt, wordt deze onmiddellijk afgesloten. - Dave Costa


Je kunt dit ook doen in je shellscript.

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

Mogelijk moet u de ";" met een \.


6
2017-09-23 12:33





Zoals dit:

sqlplus / nolog userid / password @ tnsname @filename

Als u dit in een batchbestand plaatst, gaat de besturing door met de verklaring (en) die erop volgt.

EDIT: Mijn slechte, probeer opnieuw met / nolog-vlag


4
2017-09-22 23:43



Helaas werkt dit niet. Wanneer ik het batchbestand uitvoer, wacht SqlPlus op de prompt SQL> voor gebruikersinvoer in plaats van het besturingselement terug te zetten naar de opdrachtprompt. - JoshL
Sorry, dit werkt ook niet. / nolog staat toe dat sqlplus start zonder in te loggen. Het heeft niets te maken met het afsluiten van een script wanneer het voltooid is. - JoshL
Hmm, ik begin me af te vragen over omgevingsverschillen. Ik heb verschillende bat-scripts die sqlplus op deze manier gebruiken.
Chris, kun je een werkend voorbeeld geven? Gewoon iets simpels dat een "select * from dual" uitvoert of iets ... Ik heb voorbeelden gemaakt om uw suggesties uit te proberen, zonder resultaat. Vergeet niet dat dit op Windows staat. - JoshL
Josh, zie nieuw antwoord hieronder.


Ja, het is mogelijk - genereer een wrapper-script dat SQLPlus op de juiste manier instelt, inclusief uw script (bijv. @YourTargetScript.sql), en vervolgens een exit.

Dat gezegd hebbende, raad ik deze benadering helemaal niet aan - SQLPLUS heeft een groot aantal pogingen voor programmatisch gebruik; bij het schrijven van shellscripts in het verleden waarin Oracle werd gebruikt, heb ik er een Python-wrapper omheen gebouwd (meer redelijk foutafhandelingsgedrag toevoegen, normale scheiding van uitvoer tussen stdout / stderr, native CSV-uitvoerondersteuning en andere dergelijke goodies), en dat werkte veel beter.


3
2017-09-22 23:40



Bij elk ander programma ben ik het met je eens. MAAR Ik ontdekte dat SQLPlus mij een bruikbare context gaf voor een slechte query die andere omgevingen (in mijn geval Perl / DBI / DBD :: Oracle) niet hadden. Als je voorzichtig met fouten omgaat, kan dat de moeite waard zijn.
Afhankelijk van hoeveel controle u hebt over de server, kunt u ook mogelijk niet meer uitgaan van beschikbaarheid dan shell en SQLPlus. Veel stogier unix-winkels met Solaris, HP / UX, AIX en dergelijke gebruiken zeer kale installaties en laten u niets anders op de doos installeren. Merk op dat dit soms een oplossing is om een ​​minimale interpreter met uw applicatie te bundelen. - ConcernedOfTunbridgeWells


Voor degenen die zich zorgen maken over de veiligheid van het opnemen van uw wachtwoord in het script, heeft AskTom een ​​artikel over "extern geïdentificeerd" http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:142212348066


1
2017-07-16 19:38



Hoewel dit theoretisch de vraag kan beantwoorden, het zou de voorkeur hebben om de essentiële delen van het antwoord hier op te nemen, en geef de link voor referentie. - Scott Pack


Voeg in uw SQL-script EXIT toe. Hier is een voorbeeld mijn test.bat bestand heeft de volgende:

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

mijn test.sql bestand heeft de volgende: selecteer * uit dubbel; Uitgang


0
2018-06-19 20:40



Dat is prima, maar voldoet niet aan de vereiste om dit te doen zonder het script aan te passen om een ​​exit / quit-statement op te nemen. De bedoeling is dat deze scripts kunnen worden uitgevoerd door een DBA van SQL Plus, maar ook kunnen worden uitgevoerd vanuit een batchbestand. - JoshL