2017-10-09 4 views
0

sqlplusを使用してバッチファイルプロセスを使用してOracle DBにアップロードするXMLファイルがあります。私はこのように私のXMLファイルをループしています :バッチファイルはxmlファイルの内容をsqlplusに渡します

for %%f in (%FILE%) do (
call :load_file %%f 
) 

% FILE%は、同様に100%でないことを確認問題になることがあります。この変数は、次のように設定されています。

set FILE=%CURRENT_DIRECTORY%\File1_*.xml 

..パターンに一致するファイルをすべて取得する必要があります。

In:load_file sqlplusに渡す実際のファイルの内容(文字列として)が必要です。 %1はファイル名そのものです。実際にはsqlplusコマンドに渡すXMLファイルの内容が必要です。そのため、内容は実際にOracle DBに挿入できます。

:load_file 
set FILECONTENTS=?  

sqlplus -S %DB_USER%/%DB_PASSWORD%@%DB_SID% @insert_xml_into_db.sql %1 %FILECONTENTS% 

私はこの誤ったことについても考えているかもしれません。任意の提案をいただければ幸いです。簡単な方法がありますか?

+0

仕事に行くのではありません。それをしてはいけない。適切な解決方法はこちらを参照してください - https://docs.oracle.com/database/121/ADXDB/xdb25loa.htm#ADXDB2900 – OldProgrammer

+0

これは悲しいことです。少なくともファイルを行単位でバッチ変数に読み込んで、その変数をsqlplusに渡す方法はありませんか? – Airborne

答えて

0

XMLファイル全体を読み込むのは良い考えではありませんが、ファイルからSQLサーバーに行を読み込む方法も尋ねています。どのようにこの例について:

ファイル(Dark.txt):

SELECT ('ABC') Row1 FROM Dual; 
SELECT ('DEF') Row2 FROM Dual; 

バッチスクリプト(Dark.bat):

@echo off 

SET fileA=Dark.txt 
SET USER=userName 
SET PASSWORD=myPassword 
SET DATABASE=myDatabase 

for /f "tokens=*" %%a in (%fileA%) do (
    echo %%a | sqlplus %USER%/%PASSWORD%@%DATABASE% 
) 

pause 
+0

これは良いアイデアですが、実際にはファイルの内容全体を行単位ではなくsqllite呼び出しに渡す必要があります。上記の私のコメントは、基本的には、行ごとにファイルの内容でスクリプト文字列変数を構築し、その全体の変数をSQL呼び出しに渡すことでした。それも可能ではないようです。 – Airborne

関連する問題