当前状态: 我有一个批处理脚本(mybatch.bat),它通过.sql文件(file.sql)调用存储过程,并且当前将三个变量传递给它 - 存储过程和两个参数。 .sql当前基于此存储过程输出变量:
file.sql
set serveroutput on
variable out_val varchar2;
exec &1('&2', '&3', :out_val);
print out_val
exit
mybatch.bat
set procedure=%1
set param1=%2
set param2=%3
set strYN = ' '
rem ** This line stores out_val value Y or N as strYN.
for /F "usebackq" %%i in (`sqlplus database/pw@user @"file.sql" %procedure% %param1% %param2%`) do (
set stryn=%%i
if /I "!strYN!"=="N" (goto:nextN) else (if /I "!strYN!"=="Y" goto:nextY)
)
问题: 我希望能够从同一个.sql文件调用其他存储过程,该文件可能不具有输出变量(out_val)。所以我希望能够连接我的批处理中的执行行并将其作为变量传递给.sql
未来状态: 我希望能够将整个命令作为变量传递到我的.sql中,如下所示:
file.sql
set serveroutput on
variable out_val varchar2;
exec &1
print out_val
exit
mybatch.bat
set procedure=%1
set param1=%2
set param2=%3
set strYN = ' '
set command=%procedure%('%param1%', '%param2%', :out_val);
rem ** This line stores out_val value Y or N as strYN.
for /F "usebackq" %%i in (`sqlplus database/pw@user @"file.sql" %command%`) do (
set stryn=%%i
if /I "!strYN!"=="N" (goto:nextN) else (if /I "!strYN!"=="Y" goto:nextY)
)
这可能吗?或者.sql变量只能用作参数?也许有一个sql函数接受变量作为要执行的行?
答案 0 :(得分:1)
事实证明问题是关于我的%命令%变量值的末尾的分号。我从变量的值中删除了分号,并将其添加到.sql文件中的exec命令的末尾。我还将%命令%参数传递包含在引号中,因为变量包含空格。
file.sql
set serveroutput on
variable out_val varchar2;
exec &1;
print out_val
exit
mybatch.bat
set procedure=%1
set param1=%2
set param2=%3
set strYN = ' '
set command=%procedure%('%param1%', '%param2%', :out_val)
rem ** This line stores out_val value Y or N as strYN.
for /F "usebackq" %%i in (`sqlplus database/pw@user @"file.sql" "%command%"`) do (
set stryn=%%i
if /I "!strYN!"=="N" (goto:nextN) else (if /I "!strYN!"=="Y" goto:nextY)
)