能不能举一个简单的实例让我看看
执行一个存储过程pro_0调用游标custom_1调用存储过程叫pro_1
如果我的提问有概念模糊或者不正确,那一般是怎么使用游标和存储过程呢?就是用游标调用存储过程
希望有实例注释,谢谢!
oracle怎样用游标调用存储过程
答案:2 悬赏:10 手机版
解决时间 2021-04-07 20:33
- 提问者网友:战魂
- 2021-04-06 20:30
最佳答案
- 五星知识达人网友:拾荒鲤
- 2021-04-06 20:50
这个需要用程序包package来做。在包头里定义入参为游标
create or replace
PACKAGE pro_test
AS
TYPE CURSOR_PAGE IS REF CURSOR;
PROCEDURE insert_one_teacher(
p_1 IN CURSOR_PAGE);
END;
后面包体就不列了。
create or replace
PACKAGE pro_test
AS
TYPE CURSOR_PAGE IS REF CURSOR;
PROCEDURE insert_one_teacher(
p_1 IN CURSOR_PAGE);
END;
后面包体就不列了。
全部回答
- 1楼网友:一把行者刀
- 2021-04-06 22:08
不知道你那里。
是不是可以把那个 存储过程 (参数是游标)的。
修改为 函数, 返回游标。
如果可以修改的话, 那么你参考一下 下面这个例子代码
-- 测试表数据。
select * from test_main;
id value
---------- --------------------
1 one
3 three
2 two-- 返回结果集的函数.
create or replace function get_test_main_all
return sys_refcursor
is
return_cursor sys_refcursor;
begin
open return_cursor for 'select * from test_main';
return return_cursor;
end;
/
-- 普通的查询,来查看结果.
select get_test_main_all() from dual;
get_test_main_all()
--------------------
cursor statement : 1
cursor statement : 1
id value
---------- --------------------
1 one
3 three
2 two
-- 存储过程调用, 来获取结果.
declare
-- 调用函数的返回值.
testcursor sys_refcursor;
-- 存储单行数据.
testrec test_main%rowtype;
begin
-- 调用返回结果集的函数.
testcursor := get_test_main_all();
-- 循环,遍历结果.
loop
-- 游标向前.
fetch testcursor into testrec;
-- 无数据的情况下,退出循环.
exit when testcursor%notfound;
-- 输出调试信息.
dbms_output.put_line( to_char(testrec.id) || ' ' || testrec.value);
end loop;
end;
/
1 one
3 three
2 two
pl/sql 过程已成功完成。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯