Как использовать 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