[英]Save Stored Procedure output variable in Batch Script Variable
目的:从批处理脚本运行存储过程,并将其输出变量保存到批处理脚本中的变量。
我在那里的比例是90%,但我仍然遇到这个问题。 我有一个针对我们的数据库运行的存储过程,并且根据数据库中的当前值返回一个1个字符的VARCHAR2-Y或N。
调用存储过程的sql(为了安全起见,我已重命名参数并进行调用):
set serveroutput on
variable out_val varchar2;
exec SCHEMA.STOREDPROCEDURE('INPUT1', 'INPUT2', :out_val);
print out_val
exit
从批处理脚本调用该sql文件,该批处理脚本旨在检查out_val是设置为Y还是N。我当前的批处理调用如下所示:
@echo on
set strYN = ' '
rem This line needs to store the value Y or N in a variable to be echoed at the end of the script.
for /F "usebackq" %%i in (`sqlplus schema/PW@USER @"sqlcall.sql"`) do set stryn=%%i
echo %strYN%
pause
我得到以下输出。 我的Batch变量被设置为SQL连接最后一行的第一个单词:
>set strYN = ' '
>rem ** This line needs to store the value Y or N in a variable to be echoed at the end of the script.
>for /F "usebackq" %i in (`sqlplus schema/PW@USER @"sqlcall.sql"`) do set stryn=%i
>set stryn=SQL*Plus:
>set stryn=Copyright
>set stryn=Connected
>set stryn=Oracle
>set stryn=With
>set stryn=PL/SQL
>set stryn=STOREDPROCEDURE
>set stryn=OUT_VAL
>set stryn=--------------------------------
>set stryn=N
>set stryn=Disconnected
>set stryn=With
>echo With
With
>pause
Press any key to continue . . .
相反,我希望将其设置为N。一种想法是将IF语句放入usebackq的DO部分中,以检查变量是否设置为Y或N。但是,我觉得有一种方法可以做到这一点只需将out_val的值提取到我的strYN Batch变量中即可。 有什么建议么?
假设您的lawy与输出的行数相同:
for /F "skip=9 delims=" %%i in ('sqlplus schema/PW@USER @"sqlcall.sql"') do (
set stryn=%%i
goto:next)
:next
echo Stryn=%stryn%
如果没有,请对!stryn!
进行IF
测试!stryn!
:
setlocal enabledelayedexpansion
for /F "skip=9 delims=" %%i in ('sqlplus schema/PW@USER @"sqlcall.sql"') do (
set stryn=%%i
if /i "!stryn!"=="N" (goto:nextN) else (if /i "!stryn!"=="Y" goto:nextY)
)
exit /b
:nextN
echo Stryn=!Stryn!
exit /b
:nextY
echo Stryn=!Stryn!
将-S
(或-Silent
)选项添加到您的sqlplus调用中。
for ... in (`sqlplus -s schema/PW@USER @"sqlcall.sql"`) do ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.