1

EDB plus 用于调用企业数据库过程 (EDB SPL),过程的返回值将被捕获在一个 shell 变量中。需要相同的语法和详细信息。数据库位于远程计算机上。

我可以调用 EDB SPL(存储过程),而无需提及使用EDB * Plus远程服务器的输出参数。但无法将其输出参数的值捕获到 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);

我想在 shell 变量“Proc_result”中获取“output_param1”和“output_param2”的值

4

1 回答 1

0

也许您需要使用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)
于 2019-10-09T18:50:06.160 回答