oracle和dm7使用sys_refcursor和ref cursor返回结果集

1 篇文章 0 订阅

oracle和dm7使用sys_refcursor和ref cursor返回结果集

1.二者的区别
ref cursor和sys_refcursor 前者需要单独声明,后者直接引用

举例:
declare
cur_test sys_refcursor;

declare
type df_ref is ref cursor;
rf df_ref;

2.如何显示结果集
1)第一种,直接在存储过程中,定义了输出到某个具体列,调用的时候就不用做定义。
CREATE OR REPLACE PROCEDURE “TEST3”
(
PIN IN NUMBER,
POUNT OUT SYS_REFCURSOR)
AS
type ty1 is record(n1 number,n2 number);
t_row ty1;
BEGIN
open pount for select pin,pin+10 from dual;
loop
fetch pount into t_row;
exit when pount%notfound;
PRINT t_row.n1||’ '||t_row.n2; ----达梦用print输出,oracle用dbms_output.put_line输出
end loop;
END;

调用:
DECLARE
REFC SYS_REFCURSOR;
BEGIN
TEST3(2,REFC);
end;
显示结果:2,12(此方法在dm7和oracle都适用)

2)第二种,在存储过程中,没有定义输出,那么调用的时候就需要指明具体的输出列。
CREATE OR REPLACE PROCEDURE “TEST5”
(
PIN IN NUMBER,
POUNT OUT SYS_REFCURSOR)
AS
BEGIN
open pount for select pin,pin+10 from dual;
END;

调用:
DECLARE
REFC SYS_REFCURSOR;
type ty1 is record(n1 number,n2 number); —声明一种自定义类型
t_row ty1; --声明一个ty1类型的变量
BEGIN
TEST5(2,REFC);
loop
fetch REFC into t_row; —将游标值赋给变量
exit when REFC%notfound;
PRINT t_row.n1||’ '||t_row.n2; ----达梦用print输出,oracle用dbms_output.put_line输出
end loop;
end;
显示结果:2,12(此方法在dm7和oracle都适用)

3.什么情况使用rowtype,什么情况定义record
declare
cur_test sys_refcursor;

(二选一)a
t_row users%rowtype; —当你的输出结果正好是一个表的所有列,或者一个视图的所有列

(二选一)b
type type_1 is record(n1 number,n2 varchar2(30)); —当你的输出不能使用rowtype时,需要自定义所有输出列的类型。
t_tow type_1;

4.sqlplus中使用refcursor
sqlplus界面:
SQL>var r refcursor; ----或者variable r refcursor;
SQL>exec p_test(:r);
SQL>print r; ----打印出结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值