批处理文件将xml文件内容传递给sqlplus
Posted
技术标签:
【中文标题】批处理文件将xml文件内容传递给sqlplus【英文标题】:Batch file pass xml file contents to sqlplus 【发布时间】:2017-10-09 15:29:01 【问题描述】:我有想要通过使用 sqlplus 的批处理文件过程上传到 Oracle DB 的 XML 文件。 我正在像这样遍历我的 XML 文件:
for %%f in (%FILE%) do (
call :load_file %%f
)
%FILE% 也可能是一个问题,不是 100% 确定的。这个变量的设置如下:
set FILE=%CURRENT_DIRECTORY%\File1_*.xml
..并且应该提取任何与模式匹配的文件。
在 :load_file 中,我需要将实际文件内容(作为字符串)传递给 sqlplus。我有以下内容,其中 %1 是文件名本身。我实际上需要将 XML 文件内容传递给我的 sqlplus 命令,以便将内容实际插入 Oracle DB。
:load_file
set FILECONTENTS=?
sqlplus -S %DB_USER%/%DB_PASSWORD%@%DB_SID% @insert_xml_into_db.sql %1 %FILECONTENTS%
我可能也在寻找/思考这个错误。任何建议,将不胜感激。有没有更简单的方法?
【问题讨论】:
那行不通。你不能这样做。请参阅此以获得适当的解决方案 - docs.oracle.com/database/121/ADXDB/xdb25loa.htm#ADXDB2900 这很可悲。有没有办法至少将文件逐行读入批处理变量,然后通过sqlplus传递该变量? 【参考方案1】:我认为读取整个 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
【讨论】:
这是个好主意,但是我真的需要将整个文件内容传递给 sqllite 调用,而不是逐行传递。我上面的评论是关于基本上用文件的内容逐行构建脚本字符串变量,然后将整个变量传递给 sql 调用。这似乎也不可能。以上是关于批处理文件将xml文件内容传递给sqlplus的主要内容,如果未能解决你的问题,请参考以下文章