Oracle存储过程 在PL/SQL中如何给%rowtype传参?

chan10 2010-10-01 07:22:24
Oracle存储过程 在PL/SQL中如何给%rowtype传参?

环境:oracle9i PL/SQL
有如下表:

create table dept
(deptno number,
dname varchar2(20),
loc varchar2(20)
);


如下存储过程:

create or replace procedure dept_procedure(a in varchar2,v_a out dept%rowtype)
is
--声明游标
cursor c_de(a in varchar2)
is select * from dept where dname=a;
begin
--打开游标,对其中找到的记录进行遍历
open c_de(a);
loop
fetch c_de into v_a;
exit when c_de%notfound;
end loop;
close c_de;
dbms_output.put_line('deptno:'||v_a.deptno);
dbms_output.put_line('dname:'||v_a.dname);
dbms_output.put_line('loc:'||v_a.loc);
end;


问:想在PL/SQL中,直接通过exec方法调用,这个存储过程,
不知道怎么传入第二个参数,
1.还有办法做啊?
2.如果不行的话,如何从其他方面调用这个存储过程啊?
...全文
658 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
minitoy 2010-10-11
  • 打赏
  • 举报
回复
这样符合类型的out参数没法在sqlplus或者plsql developer的command窗口中定义变量.
1楼的方法在commad windows和sql windows都可以调用,只不过在sql windows里调用的时候,你的dbms_output.put_line的输出看不到.
chan10 2010-10-11
  • 打赏
  • 举报
回复
国庆的帖子就这么沉了。
gelyon 2010-10-11
  • 打赏
  • 举报
回复
SQL Windows 下也可以这样:

declare
v_row dept%rowtype;
begin
dept_procedure(a, v_row);
end;
ojuju10 2010-10-11
  • 打赏
  • 举报
回复
参数可以为入参,也可以为出参

create or replace procedure dept_procedure(a in varchar2,v_a in out dept%rowtype)
ojuju10 2010-10-11
  • 打赏
  • 举报
回复
出参不需要传递参数
Ammy_Jiang 2010-10-11
  • 打赏
  • 举报
回复
第二是输出参数,不用传值的
exec dept_procedure('value');
心中的彩虹 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wkc168 的回复:]
引用楼主 chan10 的回复:
Oracle存储过程 在PL/SQL中如何给%rowtype传参?

环境:oracle9i PL/SQL
有如下表:

SQL code

create table dept
(deptno number,
dname varchar2(20),
loc varchar2(20)
);



如下存储过程:

SQL code……
[/Quote]
--调用


SQL> edi
已写入 file afiedt.buf

1 create or replace procedure dept_procedure(a in varchar2,v_a out dept%rowtype)
2 is
3 cursor c_de(a in varchar2) is select * from dept where dname=a;
4 begin
5 open c_de(a);
6 loop
7 fetch c_de into v_a;
8 exit when c_de%notfound;
9 dbms_output.put_line('deptno:'||v_a.deptno);
10 dbms_output.put_line('dname:'||v_a.dname);
11 dbms_output.put_line('loc:'||v_a.loc);
12 end loop;
13 close c_de;
14* end;
SQL> /

过程已创建。

SQL> declare
2 c dept%rowtype;
3 v varchar2(10):='kk';
4 begin
5 dept_procedure(v,c);
6 dbms_output.put_line('deptno:'||c.deptno);
7 dbms_output.put_line('dname:'||c.dname);
8 dbms_output.put_line('loc:'||c.loc);
9 end;
10 /
deptno:10
dname:kk
loc:NEW YORK
deptno:10
dname:kk
loc:NEW YORK

PL/SQL 过程已成功完成。


心中的彩虹 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 chan10 的回复:]
Oracle存储过程 在PL/SQL中如何给%rowtype传参?

环境:oracle9i PL/SQL
有如下表:

SQL code

create table dept
(deptno number,
dname varchar2(20),
loc varchar2(20)
);



如下存储过程:

SQL code

create or repl……
[/Quote]

你的第二个是out 输出参数 是赋值的 不要传
chan10 2010-10-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qq646748739 的回复:]
v_a out dept%rowtype
是输出参数,根本不要你传啊!

调用方法:

SQL code

declare
v_row dept%rowtype;
begin
dept_procedure(a, v_row);
end;
[/Quote]

这哥么的方法,调的通,谢谢。
问下,这个是不是只能在PL/SQL的command window中执行,
而不能再SQL window中跑啊?
chan10 2010-10-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fwx515354 的回复:]
既然v_a out dept%rowtype是输出类型,不用传参数,
那就直接这样就行了:exec dept_procedure('value', null);
[/Quote]
哥么。这个写法你测试了没?
调用了,报错信息:

ORA-06550: 第 2 行, 第 31 列:
PLS-00363: 表达式 ' NULL' 不能用作赋值目标
ORA-06550: 第 2 行, 第 7 列:
PL/SQL: Statement ignored
碧水幽幽泉 2010-10-01
  • 打赏
  • 举报
回复
v_a out dept%rowtype
是输出参数,根本不要你传啊!

调用方法:

declare
v_row dept%rowtype;
begin
dept_procedure(a, v_row);
end;
fwx515354 2010-10-01
  • 打赏
  • 举报
回复
既然v_a out dept%rowtype是输出类型,不用传参数,
那就直接这样就行了:exec dept_procedure('value', null);

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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