我对 ksh 脚本非常陌生,但我有 2 个 ksh 脚本,每个脚本都通过 isql 调用 sybase 存储过程。我看到的问题是,当我执行第一个脚本时,存储过程运行良好,但是当我执行第二个脚本时,它失败并出现错误(isql -b -S value -U value -P value: not found)。这是代码片段
$SERVER、$DBO_USER 和 $DBO_PASSWORD 的值在脚本的前面设置。
测试1.ksh:
ISQL_CMD="isql -b -S ${SERVER} -U ${DBO_USER} -P ${DBO_PASSWORD}"
VAR=`${ISQL_CMD} << EOF
set nocount on
go
set proc_return_status off
go
declare @var_id int
,@rtnval int
exec @rtnval = DB_NAME..MY_STORED_PROC_1
@parameter1 = ${VAR_IN}
,@parameter_output = @var_id output
go
EOF`
这执行得很好,我在 VAR 变量中得到了值
test2.ksh(VAR 变量从 test1.ksh 传入):
ISQL_CMD="isql -b -S ${DSQUERY} -U ${DBO_USER} -P ${DBO_PASSWORD}"
RETURN_VALUE=`${ISQL_CMD} << EOF
set nocount on
go
declare @rtnval int
exec @rtnval = DB_NAME..MY_STORED_PROC_2
@var_id = '${VAR}'
go
EOF`
我收到以下错误:
isql -b -S 值 -U 值 -P 值:未找到
这些脚本可以彼此独立运行,因此不能保证 isql 可能在 test2.ksh 之前被调用,这就是我在每个脚本中设置 ISQL_CMD 变量的原因。
test1.ksh运行正常,但test2.ksh不能正常运行,无论是从test1.ksh调用还是自行运行。尝试在调试中运行脚本,但它并没有真正提供任何进一步的信息。