繁体   English   中英

将存储过程的输出变量保存在批处理脚本变量中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM