批处理文件将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的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQLPLUS 中的数据库值作为批处理文件的参数

如何将双引号中的路径传递给sql文件

将打开文件的路径传递给批处理文件[重复]

Windows 7批处理文件:如何检查参数是不是已传递给批处理文件

如何将select的结果分配到sqlplus变量中

Python函数:使用批处理文件将参数从.txt文件传递给python函数并执行函数