从 shell 脚本调用 PL/SQL 存储过程并捕获 out 参数

Posted

技术标签:

【中文标题】从 shell 脚本调用 PL/SQL 存储过程并捕获 out 参数【英文标题】:Call PL/SQL stored procedure from shell script and capture the out outParameter 【发布时间】:2010-12-27 04:32:08 【问题描述】:

问题:

我有一个 PL/SQL 存储过程 callServlet(wire_type in varchar2, out_flag out varchar2)。在这个存储过程中,我必须 调用一个servlet。 最初,我需要一个 shell 脚本,它通过从 shell 传入、传出参数来执行这个 callServlet 存储过程。 我需要从存储过程中捕获 out_flag9Out 参数值,并且我必须评估存储的 out_flag 值 判断out_flagg的值是success还是not_success。

请您告诉我以下情况

    如何通过传入和传出参数从 shell 脚本调用存储过程 (callServlet)? 如何获取 callServlet 存储过程发送的 out 参数? 如何评估 callServlet 的 out 参数以了解状态是否成功?

提前致谢!!

【问题讨论】:

【参考方案1】:

首先创建一个名为callServlet.sql的SQL*plus脚本:

var l_flag varchar2(100)

begin
  callServlet('&1', :l_flag);
end;
/

print l_flag

然后使用反引号从 shell 脚本中调用带有 SQL 脚本的 SQL*plus:

flag=`sqlplus user/secret@database @callServlet.sql "xy"`

out 参数将分配给shell 变量flag“xy”是参数wire_type的值。

【讨论】:

我试过这个,当我执行 shell 脚本时,它并没有简单地结束它的开始而没有任何结果.. 我必须在控制台上使用 (ctrl Z) 来突然它。而且要使用它,我们还有一个问题 flag=sqlplus user/secret@callServlet.sql "xy" 。我们已经在使用 flag=sqlplus user/secret@DATABASE_B to connect to particular database and so I have to usie this command in the following way flag=sqlplus user/secret@DATABASE_B@callServlet.sql "xy"`,我不认为这会起作用 很抱歉,shell 脚本中有错误。你准确地指出了我的错误陈述。我现在已经修好了。

以上是关于从 shell 脚本调用 PL/SQL 存储过程并捕获 out 参数的主要内容,如果未能解决你的问题,请参考以下文章

oracle SQL语句中怎么样调用存储过程

从存储过程中调用 PL/SQL 游标得到结果

如何从 pl sql 过程运行 sql 脚本

如何从 R 调用存储在 Oracle 数据库中的 PL/SQL 过程

从 PL/SQL 返回错误

从存储过程调用时,PL SQL Execute Immediate 不起作用