Oracle调用另一个存储过程,该过程返回一个存储过程中的游标。
SQL代码:
复制代码代码如下所示:
创建或替换程序(p_testa
presult出sys_refcursor
)
作为
开始
打开presult为SELECT * FROM用户;
最后p_testa;
用户是数据库中的表,打电话时只声明一个表式型:
SQL代码:
复制代码代码如下所示:
创建或替换程序p_testb
作为
varcursor sys_refcursor;
R用户%ROWTYPE;
开始
p_testa(varcursor);
环
取varcursor为R;
退出时未varcursor %;
dbms_output.put_line(r.name);
结束循环;
最后p_testb;
在第二种情况下,我们不返回表的所有列,可能只有一列或两列,例如:
SQL代码:
复制代码代码如下所示:
创建或替换程序(p_testa
presult出sys_refcursor
)
作为
开始
选择ID开放presult,名字从用户;
最后p_testa;
这里我们只返回用户表的ID、名称的两个列,并且在调用时必须做出相应的更改:
SQL代码:
复制代码代码如下所示:
创建或替换程序p_testb
作为
varcursor sys_refcursor;
光标tmpcursor选择ID,名字从用户那里rownum = 1;
R tmpcursor %ROWTYPE;
开始
p_testa(varcursor);
环
取varcursor为R;
退出时未varcursor %;
dbms_output.put_line(r.id);
结束循环;
最后p_testb;
与以往不同的是,我们声明一个游标类型变量tmpcursor。注意,tmpcursor结构必须符合由存储过程返回的游标结构p_testa,否则会出现错误。在同样的方式,免费电话可以实现只要两游标类型都按照相同的结构。