oracle 在一个存储过程中调用另一个返回游标的存储过程_oracle

第一种情况是返回的游标是某个具体的表或视图的数据,如:
SQL-Code:

复制代码 代码如下:

CREATE OR REPLACE PROCEDURE P_TESTA (
PRESULT OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN PRESULT FOR SELECT * FROM USERS;
END P_TESTA;

其中USERS就是数据库中一个表。在调用的时候只要声明一个该表的ROWTYPE类型就可以了:
SQL-Code:

复制代码 代码如下:

CREATE OR REPLACE PROCEDURE P_TESTB
AS
VARCURSOR SYS_REFCURSOR;
R USERS%ROWTYPE;
BEGIN
P_TESTA(VARCURSOR);
LOOP
FETCH VARCURSOR INTO R;
EXIT WHEN VARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.NAME);
END LOOP;
END P_TESTB;

第二种情况,我们返回的不是表的所有的列,或许只是其中一列或两列,如:
SQL-Code:

复制代码 代码如下:

CREATE OR REPLACE PROCEDURE P_TESTA (
PRESULT OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN PRESULT FOR SELECT ID,NAME FROM USERS;
END P_TESTA;

这里我们只返回了USERS表的ID,NAME这两个列,那么调用的时候也必须做相应的修改:
SQL-Code:

复制代码 代码如下:

CREATE OR REPLACE PROCEDURE P_TESTB
AS
VARCURSOR SYS_REFCURSOR;
CURSOR TMPCURSOR IS SELECT ID,NAME FROM USERS WHERE ROWNUM=1;
R TMPCURSOR%ROWTYPE;
BEGIN
P_TESTA(VARCURSOR);
LOOP
FETCH VARCURSOR INTO R;
EXIT WHEN VARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.ID);
END LOOP;
END P_TESTB;

与之前不同的是我们声明了一个游标类型的变量TMPCURSOR ,注意TMPCURSOR 的结构必须与存储过程P_TESTA 返回的游标结构一致,否则就会出现错误。同理只要保持两个游标类型结构一致,就可以实现自由调用。

时间: 2024-09-19 09:15:07

oracle 在一个存储过程中调用另一个返回游标的存储过程_oracle的相关文章

怎样在一个类中调用另一个窗体中的控件?

问题描述 一个串口接收类recvClass,有个线程recvThread接收数据,一个窗体FORM2,怎样在FORM2的listbox1中添加recvThread到的数据?有什么好方法吗? 解决方案 解决方案二:是否可以考虑在你接收数据的线程中访问Form2的listbox1控件注:若采用上述方法,则需要考虑采用Invoke方法来实现在线程recvThread中调用listbox1控件具体示例可参考网络上的那些在多线程程序中访问并更新主线程进度条处理解决方案三:recvClass类里:publi

怎样在一个类中调用另一个类的方法

问题描述 小弟新学.net,自己建了一个operate类,里面有一些方法实现诸如绑定datagrid之类的操作,又建了一个DBAccess类,想在里面实现页面控件绑定数据库数据的功能.比如operate类里面有方法BindDataGrid(stringsql,DataGriddg),我想在DBAccess里实现publicvoidBindUser(DataGriddg){stringsql="select*fromuser";operate.BindDataGrid(sql,dg)}在

oracle 自定义函数返回一个自定义整数列,如何在下一个自定义函数中,调用上一个函数

问题描述 oracle 自定义函数返回一个自定义整数列,如何在下一个自定义函数中,调用上一个函数 ---自定义类型 create or replace type t_int is table of integer -- Create table create table TESTFUNCTION ( oid INTEGER, result INTEGER ) tablespace USERS pctfree 10 initrans 1 maxtrans 255; -- Create table

如何在Oracle存储过程中调用Java方法

存储过程中调用Java程序段 软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:\ORACLE 实现方法: 1.创建一个文件为Test.java public class Test { public static void main(String args[]) { System.out.println("HELLO THIS iS A Java PROCEDURE"):

如何在一个JSP页面中调用另一个JSP页面中的变量

在jsp学习中,经常需要在一个jsp页面中调用另一个jsp页面中的变量,下面就这几天的学习,总结一下. jsp页面之间的变量调用有多种方法: 1.通过jsp的内置对象-request对象获取参数: (1)通过超链接传参: 例:把a.jsp中i的值传到b.jsp中: 在a.jsp页面中的核心代码为: <a href="b.jsp?i=1">传参</a>     (说明:给i赋值时也可以用jsp表达式,例如i=<%变量名 %>) 在b.jsp页面中的核心

yii框架:在一个controller如何调用另一个controller的方法(有返回值)

问题描述 yii框架:在一个controller如何调用另一个controller的方法(有返回值) yii框架:在一个controller如何调用另一个controller的方法(有返回值) 解决方案 http://nonfu.me/p/2418.html

Python中如何在一个.py文件中调用另一个.py中的列表中的内容

问题描述 Python中如何在一个.py文件中调用另一个.py中的列表中的内容 比如在a.py中如何调用b.py中的列表T=[1,2,3,4,5]中的数字 解决方案 一般不要直接在模块之间传递变量等,你应该通过函数的方式,用参数来传递 a.py调用b.py中的一个函数,参数是T这个列表 解决方案二: 0.0不知道..... 解决方案三: python中shell调用py文件的内容 解决方案四: 首先,被调用的那个.py文件应该在一个模块里,举个例子: 你有两个文件a.py和b.py,a.py里有

存储过程中调用C#写的DLL

存储过程 最近一个项目中遇到一个转换FileTime的问题.时间是在C#中用DateTime.ToFileTime写入数据库中,这在存储过程中判断年和季度成了问题,怎么样才能把时间转换为正常的时间格式呢?Sql server中又没有FromFileTime对应的方法?其实很简单用C#写一个转换时间的Dll然后在存储过程中调用就可以了.转换时间的类如下:[Guid("729ba6af-3eff-4b75-b43b-d951a190dbe6")] public class FileTime

在存储过程中调用外部的动态连接库

问题的提出: 一般我们要根据数据库的纪录变化时,进行某种操作.我们习惯的操作方式是在程序中不停的查询表,判断是否有新纪录.这样耗费的资源就很高,如何提高这种效率,我想在表中创建触发器,在触发器中调用外部动态连接库通过消息或事件通知应用程序就可实现.而master的存储过程中最好能调用外部的动态连接库,我们在触发器中调用master的存储过程即可. 说明:VC6需要安装较新的Platform SDK才能顺利编译本代码,VC.Net可以直接编译本代码.另外还需要连接Opends60.lib 为了使没