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

Posted

技术标签:

【中文标题】使用 SQLPLUS 中的数据库值作为批处理文件的参数【英文标题】:Use a database value in SQLPLUS as a parameter to a batch file 【发布时间】:2013-05-30 01:01:18 【问题描述】:

我需要运行一个批处理文件并传入一个数据库值。根据日期,需要将不同的值传递给 DOS 命令。这个特定的业务规则是在数据库的视图中定义的。

我们的主要调度工具是 datastage,它在 SQLPLUS 中运行脚本,所以这是我安排活动的首选方法。我也可以直接运行一个批处理文件,调用 SQLPLUS 并获取一个值,但是设置它比较麻烦,所以我不想这样做。

我是 SQLPLUS 爱好者。

下面是我传递给 SQLPLUS 的 SQL 脚本。我遇到的问题是它传入 :sTriggerName,而不是它的值。

set echo on
set feedback on
set termout on


VAR sTriggerName VARCHAR2(100)

SELECT TRIGGERNAME INTO :sTriggerName 
FROM SCHEMA.VIEW 
WHERE CALENDAR_DATE = TRUNC(SYSDATE) AND ROWNUM < 2;
/

HOST "E:\CallScheduleTrigger.CMD :sTriggerName."

quit

【问题讨论】:

【参考方案1】:

在上面的例子中,我使用了一个绑定变量。

这个链接向我展示了如何从数据库中加载一个替换变量并使用它来代替:

http://www.oracle.com/technetwork/testcontent/sub-var9-086145.html

将数据库值加载到名为 sTriggerName 的替换变量中

COLUMN TRIGGERNAME new_value sTriggerName
SELECT TRIGGERNAME FROM SCHEMA.VIEW WHERE CALENDAR_DATE = TRUNC(SYSDATE) AND ROWNUM < 2;

要在主机命令中使用此替换变量(即作为批处理文件的参数):

HOST "E:\CallScheduleTrigger.CMD &sTriggerName"

【讨论】:

以上是关于使用 SQLPLUS 中的数据库值作为批处理文件的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何处理调用 sqlplus 的批处理文件中的错误,因为 sqlplus 没有在错误或失败时设置 ERRORLEVEL?

批处理脚本登录sqlplus参数

SQLPlus:在脚本中使用特殊字符作为密码

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

SQLPlus – 使用假脱机创建视图结构文件

oracle 的sql*plus问题