不管用多少谷歌搜索,似乎都找不到这个问题的答案。
我正在尝试修改Oracle存储过程,该存储过程当前从一些表中提取值并将其移动到其他表中。
它有一个定义如下的ROWTYPE变量:
myRow my_tbl%ROWTYPE;现在,存储过程执行一些逻辑来填充rowtype变量,然后使用它来填充表:
INSERT INTO MY_TBL
( col1,
col2,
col3,
-snip-
)
VALUES (
myRow.aValue,
myRow.aValue2,
myRow.aValu3,
-snip-
)我希望使用ROWTYPE填充返回给Web应用程序的游标,而不是填充表。但是,我找不到一种方法来完成ROWTYPE ->引用游标转换。这个是可能的吗?如果没有,有没有办法使用一些复杂的逻辑,使用从各种表中提取的数据来手动填充游标?我使用的是Oracle 10g。
谢谢!
发布于 2011-08-02 23:07:55
有关这一点的棘手之处在于,您使用的是引用游标,该游标用于一组行,以便只返回单个行的数据。我想你之所以这样做,是因为你的web应用程序理解引用游标,以及如何从Oracle获取它们,但不理解对象类型。我还猜测,出于某种原因,您不能只编写一条select语句来检索和操作所需的数据(这是最简单的方法,因此,如果有更多信息,我们可能会帮助您实现它)。
我有几种方法可以做到这一点,但都不是很好,所以希望其他人能附和一个更好的想法。
1)通过从dual中选择已计算的变量来创建光标
DECLARE
refcur SYS_REFCURSOR;
myRow TBL%ROWTYPE;
BEGIN
myRow.aValue := 1;
myRow.aValue2 := 3;
myRow.aValue3 := 5;
OPEN refcur
FOR
select
myRow.aValue,
myRow.aValue2,
myRow.aValue3
from
dual;
CLOSE refcur;
END;2)创建一个返回您的行类型的表的管道函数,并从该函数的select创建游标。
发布于 2011-08-02 23:51:12
从dual中选择应该是这样的
select myRow.aValue,
myRow.aValue2,
myRow.aValu3
from dual;您应该能够为此声明一个游标。
在http://psoug.org/reference/ref_cursors.html上有一个很好的引用游标记录
https://stackoverflow.com/questions/6913506
复制相似问题