查了半天,不知道怎么调用 oracle 的存储过程,带游标

2015-06-09 14:43:29 +08:00
 coolicer

在网上查到了这样的

declare
I_NAME VARCHAR2(10) := 'xxx';
I_IS_USING VARCHAR2(2) := '1';
v_cursor SYS_REFCURSOR;
v_count NUMBER;
r_emp emp%rowtype; ?? 这里不理解
begin
PROC_T_PROCEDURE_OBJ_LIST(I_NAME,I_IS_USING, v_cursor,v_count);
loop
fetch v_cursor into r_emp;
exit when v_cursor%NOTFOUNRD;
dbms_output.put_line('name: ' || r_emp.NAME || ' info: ' || r_emp.INFO || ' using: ' || r_emp.IS_USING);
end loop;
close v_cursor;
end;

2636 次点击
所在节点    程序员
9 条回复
ayumilove
2015-06-09 14:49:11 +08:00
%TYPE 和 %ROWTYPE 类似
百度一下 oracle %ROWTYPE 很多解释
ayumilove
2015-06-09 14:51:33 +08:00
你想用什么调用
coolicer
2015-06-09 15:22:47 +08:00
@ayumilove 我想在 sql 编辑器那里运行,看结果集输出
sun1991
2015-06-09 16:08:17 +08:00
显示结果的地方不一样. dbms_output的输出不在普通的查询结果集里面, 而是在专门的dbms output里面的.
ayumilove
2015-06-10 08:25:52 +08:00
如果仅是为了调试使用,直接在DBMS output 中查看结果就可以了(注意开启)。
我机器上只安装了 Toad,给你截图看下

coolicer
2015-06-10 08:48:59 +08:00
@ayumilove 能给个邮箱吗,想问一下你。
DECLARE
p1 VARCHAR2(100);
p2 sys_refcursor;
p3 VARCHAR2(100);
BEGIN
p1:='dd';
p3:='3';
testproc(p1,p2,p3);
-- 这里写法有没有错?然后我再从网上找了循环游标的,但是还是报错。
END;
ayumilove
2015-06-10 11:42:10 +08:00
SQL> var rset refcursor;
SQL> exec 存储过程名称(10,:rset);
SQL> print rset;

ayumilove # 139.com
coolicer
2015-06-10 16:32:13 +08:00
@ayumilove 谢谢。暂时不管,我们前端写存储过程,丢给后端可以执行。我只是想在软件中执行
ayumilove
2015-06-11 07:48:45 +08:00
我个人
在用有返回值的 这种情况,一般使用函数;
DML时候 用存储过程。

但这不是绝对的,怎么方便怎么来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/197221

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX