从 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 参数的主要内容,如果未能解决你的问题,请参考以下文章