8

小さな Windows コマンド スクリプトを制御するために sql*plus を使用しようとしています。

基本的に、データベース内のいくつかの行のステータスを表示する 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
4

6 に答える 6

7

おそらく、呼び出されたものからスクリプト(または要件に応じて条件付き)を作成しscript.sqlます。

たとえば、次の例では.bat ファイルscript.sqlが作成されます。 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
于 2012-05-08T07:15:19.227 に答える
5

これが私が最終的に使用したものです。

私の .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

script.sql の場所:

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

exit
于 2012-07-24T21:43:38.420 に答える
3

.batファイルを使用しないことを強くお勧めします。他にもたくさんの選択肢があります:C / C ++またはVB、WindowsスクリプトまたはPowershell 、あるいはPerlBashのような無料ダウンロードです。

ただし、.batファイルでエラーコードを返す1つの例を次に示します。

しかし、私が上で与えたリンクのいくつかを見てください。.batファイルを避けると、作業が簡単になり、将来の保守も簡単になります。

私見では ...

于 2012-05-07T16:25:12.167 に答える
2

私は、Windowsの処理を行う.batファイルを作成し、必要に応じてsqlスクリプトを呼び出すことによって、このようなことを行います。SQLを使用して、結果を読み取り可能なテキストファイルにスプールします。

...ここでコマンドを実行します

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

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

...コマンドを実行します

SQLで、このコマンドスプールC:\ yourResults.txtを使用するか、より高度な使用法の場合は、プロシージャを作成します。このプロシージャは、呼び出されると、UTL_FILEを使用して結果をテキストファイルに書き込みます。

于 2012-05-07T16:20:43.960 に答える
1

バックアップと復元のために Oracle XE に含まれている 2 つのスクリプトを確認することをお勧めします。これらのスクリプトは、Windows プラットフォームでバッチ スクリプトと Oracle を処理する方法をたくさん教えてくれました。

  • C:\oraclexe\app\oracle\product\11.2.0\server\bin\Backup.bat
  • C:\oraclexe\app\oracle\product\11.2.0\server\bin\Restore.bat
于 2012-05-08T06:55:54.833 に答える