在 sql*plus 中如何执行存储过程?如果带参数呢?

mary31 2002-08-26 11:20:16
在 sql*plus 中如何执行存储过程?如果带参数呢?
...全文
355 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinpingf 2002-08-31
  • 打赏
  • 举报
回复
首先,要确定你的函数的入、出口参数和返回值,这是几个不同的概念:

FUNCTION fun_name( param1 in varchar2, param2 out varchar2) return varchar2 is
...
begin
...
return param3;
end;

这时候,你在外面可以使用

var i_out2 VARCHAR2(20);
var i_out3 VARCHAR2(20);

declare
i_in1 VARCHAR2(10) := 'AAA';
begin
:i_out3 := fun_name(i_in,:i_out2);
end;
/

或者
SET SERVEROUTPUT ON
DECLARE
P1 VARCHAR2(10) := 'AAA';
P2 VARCHAR2(10);
P3 VARCHAR2(10);
BEGIN
P3 := fun_name(p1,p2);
dbms_output.put_line('p1:'||p1);
dbms_output.put_line('p2:'||p2);
dbms_output.put_line('p3:'||p3);
END;
/
mary31 2002-08-30
  • 打赏
  • 举报
回复
我怎么还没有调试过去呢
先等一下,不过还是先谢谢 penitent(只取一瓢) 、 jakarta(长风大侠)
jlandzpa 2002-08-28
  • 打赏
  • 举报
回复
呵呵,可以结贴了.
Croatia 2002-08-28
  • 打赏
  • 举报
回复
可以了!
var i_out1 number;
var i_out2 VARCHAR2(200);

declare
i_in integer := 1;
begin
:i_out1 := function_name(i_in,:i_out2);
end;
/
PRINT i_out2;
penitent 2002-08-28
  • 打赏
  • 举报
回复
其实在sql plus中不用写begin end;
直接这么写
select function_name(30) from dual;
把进口参数写进出,用select 就可以执行函数。
Croatia 2002-08-28
  • 打赏
  • 举报
回复
i_out2 不用吗?


上面的句子出错的!
错误信息,说i_out1没有定义.
penitent 2002-08-28
  • 打赏
  • 举报
回复
函数是没有out参数的。
在别的过程或应用程序中调用函数,得这么写
select function_name(i_in) into i_out1 from dual

jlandzpa 2002-08-28
  • 打赏
  • 举报
回复
var i_out1 number;
var i_out2 VARCHAR2(200);

declare
i_in integer := 1;
begin
i_out1 := function_name(i_in);
end;

--function_name return i_out2;

Croatia 2002-08-28
  • 打赏
  • 举报
回复
怎么没有人回答了?
Croatia 2002-08-27
  • 打赏
  • 举报
回复

谢谢大家.
但是因为我没有其他的软件工具,
所以在SQL/PLUS里面执行,
但是每次我写了类似jakarta(长风大侠)的方法,就是用了BEGIN,END
就不对了!
为什么呢?
Croatia 2002-08-27
  • 打赏
  • 举报
回复
var i_out1 number;
var i_out2 VARCHAR2(200);

declare
i_in integer := 1;
begin
exec :i_out1 := function_name(i_in,:i_out2);
end;
/

我做的是一个函数.
jakarta 2002-08-27
  • 打赏
  • 举报
回复
贴出代码
fbjia 2002-08-26
  • 打赏
  • 举报
回复
用Call语句,不过,这个语句只能在SQL语句中用,不能在PL/SQL语句中用,如果要在PL/SQL中用,就的用动态SQL,如execute immediate "call packagename.procedure(a,b,c)"
希望能对你有帮助。
jakarta 2002-08-26
  • 打赏
  • 举报
回复
1.no parm
exec procedure_name; -
2.in,out parms:
SOL>var i_out number; --out parm
sql>declare
i_in integer := 1; -- in parm
begin
exec procedure_name(i_in,:i_out);
end;
/

sql>print i_out
penitent 2002-08-26
  • 打赏
  • 举报
回复
单步调试过程,得用第三方软件,如pl/sql developer
penitent 2002-08-26
  • 打赏
  • 举报
回复
除了jakarta(长风大侠)
的方法,还有
sql>variable mypara1 varchar2(20) :='in para';
sql>variable mypara2 number
sql>exec myprocedure(mypara1,:mypara2);
Croatia 2002-08-26
  • 打赏
  • 举报
回复
jakarta(长风大侠)
我写的是过程,应该怎么调用呢?
谢谢!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧