Как использовать sql * plus в командном скрипте Windows для управления потоком?

Я пытаюсь использовать sql * plus для управления небольшим командным скриптом Windows.

в основном, я хочу выполнить некоторые PL / SQL (возможно, выбрать из представления или таблицы или выполнить функцию), который показывает мне состояние некоторых строк в базе данных, а затем, в зависимости от состояния строк, выполните некоторые команды Windows.

моя проблема заключается в том, как вернуть результаты в командный скрипт.

sqlplus user/password@server @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

6 ответов


Я, вероятно, напишу сценарий (или условный, в зависимости от требований) из вызываемого .

следующее script.sql создает .bat файл 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

затем вы можете позвонить script.sql С другой .bat файл вот так:

@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

это то, что я в конечном итоге использовал.

мой .сценарий cmd:

@ECHO OFF
ECHO Checking Oracle...

for /f %%i in ('sqlplus -s user/password@database @script.sql') do @set count=%%i
echo %count%

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

где скрипт.в SQL:

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

exit

Я настоятельно рекомендую вам не использовать .Bat-файл. У вас есть много других альтернатив: C / C++ или VB,скрипты Windows или в PowerShell, или даже бесплатные загрузки, как Perl или Баш.

но вот один пример возврата кодов ошибок .летучая мышь файлы:

но, пожалуйста, посмотрите на некоторые из ссылок, которые я дал выше. Избегающий.bat файлы сделают его более легким для вас, и сделать его легче поддерживать в будущем.

ИМХО ...


Я делаю что-то подобное создать .bat-файл, который делает материал windows и вызывает SQL-скрипты по мере необходимости. Используйте SQL для вывода результатов в текстовый файл, который вы можете прочитать.

...команд Дос

sqlplus / nolog @C:\Dump\DropRecreateUsers - ... в SQL

sqlplus / nolog @C:\Dump\Cleanup - ... в SQL

...команды dos

в sql используйте эту командную катушку C:\yourResults - ... txt или дополнительные сложные обычаи создают процедуру, которая при вызове записывает результаты в текстовый файл с помощью UTL_FILE


Я призываю вас взглянуть на два сценария, включенных в Oracle XE для резервного копирования и восстановления. Эти сценарии научили меня много, как обрабатывать пакетные сценарии и Oracle на платформе Windows.

  • C:\oraclexe\app\oracle\product\11.2.0\server\bin\Backup.летучая мышь!--4-->
  • C:\oraclexe\app\oracle\product\11.2.0\server\bin\Restore.летучая мышь!--4-->

подключен к: Oracle Database 11g Enterprise Edition выпуск 11.2.0.1.0-64bit производство С Секционированием, OLAP, интеллектуальным анализом данных и реальными вариантами тестирования приложений

SQL> @f:\testa.txt