wake-up-neo.com

Wie verwende ich sql * plus in einem Windows-Befehlsskript, um den Ablauf zu steuern?

Ich versuche, mit sql * plus ein kleines Windows-Befehlsskript zu steuern.

Grundsätzlich möchte ich PL/SQL ausführen (möglicherweise aus einer Ansicht oder Tabelle auswählen oder eine Funktion ausführen), die den Status einiger Zeilen in der Datenbank anzeigt, und dann abhängig vom Status der Zeilen einige Windows-Befehle ausführen.

Mein Problem ist, wie man die Resultate zurück in das Befehlsskript erhält.

sqlplus user/[email protected] @script.sql

IF <CONDITIONAL HERE BASED on script.sql results> GOTO :runprocess

REM log and email that process had to be skipped
EXIT

:runprocess
REM run various Windows service commands
8
Cade Roux

Das habe ich am Ende gebraucht.

Mein .cmd-Skript:

@ECHO OFF
ECHO Checking Oracle...

for /f %%i in ('sqlplus -s user/[email protected] @script.sql') do @set count=%%i
echo %count%

IF %count% GTR 0 GOTO :skipped
GOTO :runprocess

Wo script.sql:

SELECT COUNT(*)
FROM table
WHERE criteria = 1;

exit
5
Cade Roux

Ich würde wahrscheinlich das Skript (oder die Bedingung, abhängig von den Anforderungen) aus dem aufgerufenen script.sql selbst schreiben.

Der folgende script.sql erstellt beispielsweise eine .bat-Datei windows_commands.bat:

set feedback off
set echo off
set trimspool on
set termout off
set serveroutput on size 100000 format wrapped
set lines 500
set pages 0

-- create the bat file to be executed later:
spool windows_commands.bat

declare
  c number;
begin

  select count(*) into c from dual;

  -- depending on a conditional, write the stuff to be executed into the
  -- bat file (windows_commands.bat)
  if c = 1 then
     dbms_output.put_line('@echo everthing ok with dual');
  else
     dbms_output.put_line('@echo something terribly wrong with dual');
  end if;

end;
/

spool off

exit

Sie können dann script.sql von einer weiteren .bat-Datei aus aufrufen so:

@rem create Oracle session, call script.sql
sqlplus %user%/%password%@%db% @script.sql

@rem script.sql has created windows_commands.bat.
@rem call this newly created bat file:
call windows_commands.bat
7

Ich möchte Sie dringend dazu auffordern, nichtuse .bat-Dateien) zu verwenden. Sie haben viele andere Alternativen: C/C++ oder VB, Windows-Scripting oder Powershell oder sogar kostenlose Downloads wie Perl oder Bash .

Hier ein Beispiel für die Rückgabe von Fehlercodes in .bat-Dateien:

Schauen Sie sich doch bitte einige der oben genannten Links an. Durch das Vermeiden von .bat-Dateien wird es für Sie einfacher und in Zukunft einfacher zu warten.

MEINER BESCHEIDENEN MEINUNG NACH ...

3
paulsm4

Ich mache so etwas, indem ich eine .bat-Datei erstellt, die das Windows-Zeug erledigt und bei Bedarf SQL-Skripts aufruft. Verwenden Sie SQL, um Ihre Ergebnisse in eine Textdatei zu spulen, die Sie lesen können.

... hier Befehle

sqlplus/nolog @C:\Dump\DropRecreateUsers.sql

sqlplus/nolog @C:\Dump\Cleanup.sql

... dos Befehle

Verwenden Sie in der SQL-Anwendung diesen Befehl spool C:\yourResults.txt oder erstellen Sie für anspruchsvollere Verwendungen eine Prozedur, die beim Aufruf die Ergebnisse mit UTL_FILE in eine Textdatei schreibt

2
kevinsky

Ich empfehle Ihnen, sich die beiden in Oracle XE enthaltenen Skripts für das Sichern und Wiederherstellen anzusehen. Diese Skripte haben mich sehr mit Batch-Scripting und Oracle auf der Windows-Plattform vertraut gemacht.

  • C:\oraclexe\app\Oracle\product\11.2.0\server\bin\Backup.bat
  • C:\oraclexe\app\Oracle\product\11.2.0\server\bin\Restore.bat
1
Bjarte Brandt

Verbunden mit: Oracle Database 11g Enterprise Edition Version 11.2.0.1.0 - 64-Bit-Produktion Mit den Optionen Partitionierung, OLAP, Data Mining und Real Application Testing

SQL> @f:\testa.txt
0
Rizwan Basheer