我有一个现有的存储过程,它接受2个参数并返回一个oracle游标 . 游标包含大约30到60行数据 .
我想在另一个存储过程中使用上面预先存在的存储过程作为表...基本上我想调用预先存在的存储过程并查看返回的行是否包含特定值 .
例如:
SP 1 = get_data_1 (returns oracle cursor)
SP 2 = get_data_2
在get_data_2中
select count(*) from get_data_1 (pass_input_parms) A where A.ID = '12345'
从概念上讲,对我来说似乎是一件微不足道的事情,但对于oracle世界的新手,我不知道如何利用返回游标的预先存在的存储过程 .
我该怎么做?
2 回答
您不能在后续SQL语句中重用get_data_1中的REF CURSOR,因为它只是指向语句句柄的指针 . 游标本身不包含任何数据 .
你可以做点什么
然而,正如您可能想象的那样,这种情况往往相对较快 . 鉴于此,Oracle中往往不存在返回REF CURSOR参数的存储过程,除非您将完成的数据视图返回给客户端应用程序 . 例如,如果存在共享视图,GET_DATA_1和GET_DATA_2都可以查询而不是让GET_DATA_2调用GET_DATA_1,这将简化程序 . 如果GET_DATA_1是流水线表函数而不是返回REF CURSOR的过程,那么从GET_DATA_2调用GET_DATA_1会容易得多 .
如果您想开始使用流水线表函数(使用SCOTT模式)
此时,您还可以定义一个新包并学习如何使用游标循环来处理它,它将为您提供更多的编程控制 . PL / SQL是您需要查找的内容 .