2017-10-09 131 views
0

我有一些XML文件,我想通過使用sqlplus的批處理文件進程上傳到Oracle數據庫中。 我通過我的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是文件名稱本身。我實際上需要將XML文件內容傳遞給我的sqlplus命令,以便內容可以實際插入到Oracle數據庫中。

: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

相關問題