EDB plus用于调用企业数据库过程(EDB SPL),该过程的返回值将在shell变量中捕获。需要相同的语法和细节。数据库位于远程计算机上。
我可以从远程服务器使用EDB * Plus调用EDB (存储过程),而无需提及它的输出参数。但是不能将其输出参数值捕获到shell局部变量中。
--shell script code(OS is Linux, EDB version 11.3.10)
Proc_result=`edbplus -S $DB_USER/$DB_PASSWORD@$DB_SCHEMA 2>>EDB_ERROR_FILE <<END_OF_SQL
set feedback off
set pages 0
set flush off
set feedback on
exec schema1.procedure_1(input_param1, input_param2, input_param3);
exit;
END_OF_SQL`
--EDB procedure signature
schema1.procedure_1(input_param1 varchar2,
input_param2 number,
input_param3 varchar2,
output_param1 varchar2,
output_param2 number);我希望在外壳变量"Proc_result“中获得"output_param1”和"output_param2“的值。
发布于 2019-10-10 02:50:06
也许您需要使用CALL来代替EXEC
[root@ep11 bin]# DB_USER=enterprisedb
[root@ep11 bin]# DB_PASSWORD=abc123
[root@ep11 bin]# DB_SCHEMA="127.0.0.1:5432/edb"
[root@ep11 bin]# Proc_result=`edbplus -S $DB_USER/$DB_PASSWORD@$DB_SCHEMA 2>>EDB_ERROR_FILE <<END_OF_SQL
> set feedback off
> set pages 0
> set flush off
> set feedback on
> exec schema1.procedure_1('foo',1,'bar');
> exit;
> END_OF_SQL`
[root@ep11 bin]# echo $Proc_result;
EDB-SPL Procedure successfully completed.
[root@ep11 bin]# Proc_result=`edbplus -S $DB_USER/$DB_PASSWORD@$DB_SCHEMA 2>>EDB_ERROR_FILE <<END_OF_SQL
set feedback off
set pages 0
set flush off
set feedback on
call schema1.procedure_1('foo',1,'bar');
exit;
END_OF_SQL`
[root@ep11 bin]# echo $Proc_result;
02c6e1417aae6f6719a772fe7ea2cfac 1 CALL completed.
[root@ep11 bin]# psql -c "call schema1.procedure_1('foo',1,'bar')"
output_param1 | output_param2
----------------------------------+---------------
02c6e1417aae6f6719a772fe7ea2cfac | 1
(1 row)https://stackoverflow.com/questions/57182319
复制相似问题