从批处理文件向sqlplus脚本传递参数

4

我正在尝试获得一个包含我每天运行的一些脚本所需的用户名和密码的文件。现在我已经有几个使用批处理文件工作的脚本,其中包含我的用户名和密码。

我的密码批处理文件看起来像这样。 parms.bat

Rem Oracle Db
set odbUsername=myUserName
set odbpassword=myPassword

我的其他脚本调用了那个批处理文件并成功获取了信息。我有一些需要使用这些用户名和密码的sql脚本,但似乎无法让它们工作。不过,我对sqlplus脚本还比较新手。
我的Sql脚本看起来像这样。
CONNECT myusername@Oracleddbname/mypassword

SET FEEDBACK OFF;
SET ECHO OFF;
SET TERMOUT OFF;
SET HEADING OFF;
SET PAGESIZE 0;
SET LINESIZE 500;
SET TIMING OFF;
SET TRIMSPOOL ON;
SET COLSEP ',';

SPOOL C:\FileTransfers\MeterData.csv

PROMPT CoopCode,MeterID,DateTime,Value
SELECT DISTINCT
          a.coopcode
       || ','
       || a.meterno
       || ','
       || a.readdatetime
       || ','
       || a.usage
  FROM temp_reconfigured a, temp_goodsence b
 WHERE a.coopcode = b.coopcode AND a.meterno = b.meterno
;

Spool off;

EXIT;

我使用一个批处理文件来调用此脚本,该批处理文件通过Windows任务计划程序运行。
它的样子像这样。
sqlplus /nolog        @C:\FileTransfers\AutomationScripts\GoodSence\SpoolGoodSenceDataSet.sql

我希望能从批处理文件中将用户名传递给SQL。我阅读了很多资料,尝试了大约30种方法,但似乎都不起作用。提前感谢您的帮助。

2个回答

4
您可以通过以下方式传递参数: :
select '&1' from dual;

这个调用:

D:\>sqlplus user/password@db @d:\script.sql 'value'

SQL*Plus: Release 11.2.0.2.0 Production on Lun Ott 3 17:02:10 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

old   1: select '&1' from dual
new   1: select 'value' from dual

'VALU
-----
value

0

仅仅将其打出来让我想到是在调用期间传递它还是在 SQL 内部连接。然后,我编辑了我的 SQL 并删除了连接语句。

所以这样做可以实现...

echo Get Parameters
call C:\FileTransfers\AutomationScripts\parms.bat
echo %odbUsername%
echo %odbpassword%

sqlplus myusername@oracledb/%odbpassword%@C:\FileTransfers\AutomationScripts\GoodSence\SpoolGoodSenceDataSet.sql 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接