使用批处理命令将参数值从批处理文件传递到sql文件
我有一个sql文件使用批处理命令将参数值从批处理文件传递到sql文件,sql,batch-file,parameters,parameter-passing,command-prompt,Sql,Batch File,Parameters,Parameter Passing,Command Prompt,我有一个sql文件update\u qde.sql 其中包含以下代码 UPDATE profile_const set parameter_value = '04_2015' where profile_name = 'MIDAS_MTH_ALL_Panels' and parameter_name = 'PERIODS_TO'; commit; quit; 我有另一个批处理文件test.bat 我想使用batch命令将参数_值作为变量从批处理文件中传递 你能告诉我怎么做吗?使用SQLCMD
update\u qde.sql
其中包含以下代码
UPDATE profile_const
set parameter_value = '04_2015'
where profile_name = 'MIDAS_MTH_ALL_Panels'
and parameter_name = 'PERIODS_TO';
commit;
quit;
我有另一个批处理文件test.bat
我想使用batch命令将参数_值作为变量从批处理文件中传递
你能告诉我怎么做吗?使用SQLCMD变量,所以将test.bat改为调用SQLCMD而不是ISQL
@echo off
sqlcmd -E -S myserver -i update_qde.sql -v PARM1=2015-01-01
将SQL更改为使用$()表示法
这很简单
用下面3行代码创建一个批处理文件。要创建批处理文件,请创建一个新的.txt
文件,将以下代码保存在文件中,并将此文件的扩展名从.txt
重命名为.bat
在代码value1
下面的第二行中,是保存需要更新的值的变量名。第三行代码是将此变量值传递给sql文件的地方
@echo off
SET value1=04_2015
sqlplus db_username/db_password@db_schema @sample.sql %value1%
下面给出了sample.sql
的代码。下面代码中的和&1
接受从批处理文件发送的参数,并将存储在变量param1
中。稍后,您可以在BEGIN
块中使用此param1
变量,用于更新
查询
SET SERVEROUTPUT ON
SET DEFINE ON
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 200
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF
SET term off
SET verify off
set echo off
SPOOL "C:\Test\Logfile.log" append;
var param1 VARCHAR2(20);
BEGIN
:param1 := '&&1';
END;
/
SET DEFINE OFF
BEGIN
UPDATE profile_const
set parameter_value = :param1
where profile_name = 'MIDAS_MTH_ALL_Panels'
and parameter_name = 'PERIODS_TO';
commit;
END;
/
quit;
/
SPOOL OFF;
SET DEFINE ON
SET SERVEROUTPUT OFF
我验证了上面的代码,运行正常。这可能会帮助您:谢谢。我会检查并让你知道
SET SERVEROUTPUT ON
SET DEFINE ON
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 200
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF
SET term off
SET verify off
set echo off
SPOOL "C:\Test\Logfile.log" append;
var param1 VARCHAR2(20);
BEGIN
:param1 := '&&1';
END;
/
SET DEFINE OFF
BEGIN
UPDATE profile_const
set parameter_value = :param1
where profile_name = 'MIDAS_MTH_ALL_Panels'
and parameter_name = 'PERIODS_TO';
commit;
END;
/
quit;
/
SPOOL OFF;
SET DEFINE ON
SET SERVEROUTPUT OFF