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.如果不行的话,如何从其他方面调用这个存储过程啊?
...全文
604 12 打赏 收藏 转发到动态 举报
写回复
用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);
第一章 PL/SQL 程序设计简介 4 §1.2 SQLPL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 §2.2 PL/SQL结构 6 §2.3 标识符 6 §2.4 PL/SQL 变量类型 7 §2.4.1 变量类型 7 §2.4.2 复合类型 9 §2.4.3 使用%ROWTYPE 11 §2.4.4 LOB类型* 11 §2.4.5 Bind 变量 11 §2.4.6 INDEX BY TABLES 12 §2.4.7 数据类型的转换* 13 §2.5 运算符和表达式(数据定义) 13 §2.5.1 关系运算符 13 §2.5.2 一般运算符 13 §2.5.3 逻辑运算符 13 §2.6 变量赋值 13 §2.6.1 字符及数字运算特点 13 §2.6.2 BOOLEAN 赋值 13 §2.6.3 数据库赋值 13 §2.6.4 可转换的类型赋值 13 §2.7 变量作用范围及可见性 13 §2.8 注释 13 §2.9 简单例子 13 §2.9.1 简单数据插入例子 13 §2.9.2 简单数据删除例子 13 第三章 PL/SQL流程控制语句 13 §3.1 条件语句 13 §3.2 CASE 表达式 13 §3.3 循环 13 §3.3 标号和GOTO 13 §3.4 NULL 语句 13 第四章 游标的使用 13 §4.1 游标概念 13 §4.1.1 处理显式游标 13 §4.1.2 处理隐式游标 13 §4.1.3 游标修改和删除操作 13 第五章 异常错误处理 13 §5.1 异常处理概念 13 §5.1.1 预定义的异常处理 13 §5.1.2 非预定义的异常处理 13 §5.1.3 用户自定义的异常处理 13 §5.1.4 用户定义的异常处理 13 §5.2 异常错误传播 13 §5.2.1 在执行部分引发异常错误 13 §5.2.2 在声明部分引发异常错误 13 §5.3 异常错误处理编程 13 §5.4 在 PL/SQL 使用 SQLCODE, SQLERRM 13 第六章 存储函数和过程 13 §6.1 引言 13 §6.2 创建函数 13 §6.3 存储过程 13 §6.3.1 创建过程 13 §6.3.2 调用存储过程 13 §6.3.3 开发存储过程步骤 13 §6.3.4 与过程相关数据字典 13 第七章 包的创建和应用 13 §7.1 引言 13 §7.2 包的定义 13 §7.3 包的开发步骤 13 §7.4 包定义的说明 13 §7.5 子程序重载 13 §7.6 删除过程、函数和包 13 §7.7 包的管理 13 第八章 触发器 13 §8.1 触发器类型 13 §8.1.1 DML触发器 13 §8.1.2 替代触发器 13 §8.1.3 系统触发器 13 §8.2 创建触发器 13 §8.2.1 触发器触发次序 13 §8.2.2 创建DML触发器 13 §8.2.3 创建替代(Instead_of)触发器 13 §8.2.3 创建系统事件触发器 13 §8.2.4 系统触发器事件属性 13 §8.2.5 使用触发器谓词 13 §8.2.6 重新编译触发器 13 §8.3 删除和使能触发器 13 §8.4 触发器和数据字典 13 §8.5 数据库触发器的应用举例 13
第一章 PL/SQL 程序设计简介 4 §1.2 SQLPL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 §2.2 PL/SQL结构 6 §2.3 标识符 6 §2.4 PL/SQL 变量类型 7 §2.4.1 变量类型 7 §2.4.2 复合类型 9 §2.4.3 使用%ROWTYPE 11 §2.4.4 LOB类型* 11 §2.4.5 Bind 变量 11 §2.4.6 INDEX BY TABLES 12 §2.4.7 数据类型的转换* 13 §2.5 运算符和表达式(数据定义) 13 §2.5.1 关系运算符 13 §2.5.2 一般运算符 13 §2.5.3 逻辑运算符 13 §2.6 变量赋值 13 §2.6.1 字符及数字运算特点 13 §2.6.2 BOOLEAN 赋值 13 §2.6.3 数据库赋值 13 §2.6.4 可转换的类型赋值 13 §2.7 变量作用范围及可见性 13 §2.8 注释 13 §2.9 简单例子 13 §2.9.1 简单数据插入例子 13 §2.9.2 简单数据删除例子 13 第三章 PL/SQL流程控制语句 13 §3.1 条件语句 13 §3.2 CASE 表达式 13 §3.3 循环 13 §3.3 标号和GOTO 13 §3.4 NULL 语句 13 第四章 游标的使用 13 §4.1 游标概念 13 §4.1.1 处理显式游标 13 §4.1.2 处理隐式游标 13 §4.1.3 游标修改和删除操作 13 第五章 异常错误处理 13 §5.1 异常处理概念 13 §5.1.1 预定义的异常处理 13 §5.1.2 非预定义的异常处理 13 §5.1.3 用户自定义的异常处理 13 §5.1.4 用户定义的异常处理 13 §5.2 异常错误传播 13 §5.2.1 在执行部分引发异常错误 13 §5.2.2 在声明部分引发异常错误 13 §5.3 异常错误处理编程 13 §5.4 在 PL/SQL 使用 SQLCODE, SQLERRM 13 第六章 存储函数和过程 13 §6.1 引言 13 §6.2 创建函数 13 §6.3 存储过程 13 §6.3.1 创建过程 13 §6.3.2 调用存储过程 13 §6.3.3 开发存储过程步骤 13 §6.3.4 与过程相关数据字典 13 第七章 包的创建和应用 13 §7.1 引言 13 §7.2 包的定义 13 §7.3 包的开发步骤 13 §7.4 包定义的说明 13 §7.5 子程序重载 13 §7.6 删除过程、函数和包 13 §7.7 包的管理 13 第八章 触发器 13 §8.1 触发器类型 13 §8.1.1 DML触发器 13 §8.1.2 替代触发器 13 §8.1.3 系统触发器 13 §8.2 创建触发器 13 §8.2.1 触发器触发次序 13 §8.2.2 创建DML触发器 13 §8.2.3 创建替代(Instead_of)触发器 13 §8.2.3 创建系统事件触发器 13 §8.2.4 系统触发器事件属性 13 §8.2.5 使用触发器谓词 13 §8.2.6 重新编译触发器 13 §8.3 删除和使能触发器 13 §8.4 触发器和数据字典 13 §8.5 数据库触发器的应用举例 13

17,377

社区成员

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

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