0

複数のSQLを含むWindows(XP)用のバッチファイルを作成しようとしています。実行すると、1。oracleに接続します。2。ユーザーID/パスワード/スキーマを設定します。3。ループ内の各SQLを実行します。4。出力します。各SQLは独自のフラットファイルに出力します。

スクリプトを開始しました

@ECHO off

SET STATE=fl
TABLE1=AGENCY
set SQL1="SELECT Column_ID||CHR(31)||column_ENTITY_CD||CHR(31) FROM AGENCY"
set TABLE2=FIRM
set SQL2="SELECT  Column_ID||CHR(31)||Column_NM||CHR(31) FROM FIRM"
set TABLE3=FL_CO_LOB
Set SQL3="SELECT Column_ID||CHR(31)||Column_LOB_CODE||CHR(31) FROM FL_CO_LOB"
...
SET NumberOfTables=19
SETLOCAL ENABLEDELAYEDEXPANSION


 FOR /l %%A IN (1,1,%NumberOfTables%) DO (

    echo !SQL%%A!


  )
 endlocal

変数からSQLを取得することはできますが、Oracleに接続してSQLを実行し、定義されたファイルに出力を取得する方法がわかりません。

方向性を教えてください。

エコーが二重引用符を含む印刷であることに注意してください。しかし、それらがない場合は、クエリ全体ではなく、最初の単語を出力するだけです。

ありがとう

4

2 に答える 2

1

ワークステーションに oracle クライアントをインストールした場合は、コマンド ラインでデータベースを操作するための SQLPlus.exe があります。TNSNAMES.ORA ファイルが最新である必要があり、tnsping がサービスを見つけられる必要があります。

アプローチを変える必要があると思います。実行するスクリプトは、半対話的に配信されるのではなく、SQLPlus.exe プログラムにフィードする必要があります。

環境変数を作成する代わりに、.sql スクリプトを作成することをお勧めします。

バッチ ファイルの行は次のようになります。

@ECHO off

SET STATE=fl
set TABLE1=AGENCY
set TABLE2=FIRM

echo SELECT Column_ID^|^|CHR(31)^|^|column_ENTITY_CD^|^|CHR(31) FROM %TABLE1% > tablecommands.sql
echo SELECT  Column_ID^|^|CHR(31)^|^|Column_NM^|^|CHR(31) FROM %TABLE2% >> tablecommands.sql
echo SELECT Column_ID^|^|CHR(31)^|^|Column_LOB_CODE^|^|CHR(31) FROM FL_CO_LOB >> tablecommands.sql
...
<until your 19 SQL statements are declared>



SQLPlus User/Password@Database @tablecommands.sql
于 2012-04-03T20:15:19.883 に答える
0

バッチ ファイルの sql コマンドの前に sqlplus login コマンドを追加します。実行し、バッチ ファイルが存在するログ ファイルに書き込みます。

構文: sqlplus -s ora_user_name / ora_user_password [as sysdba]@ ora_sid @" path_to_sql_file " > output.log

元。sqlplus -s scott/tiger@xe @"D:\Oralcle\scripts\sql_file.sql" > output.txt

于 2014-11-14T06:53:25.560 に答える