2017-10-09 136 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

相关问题