使用rowtype变量填充游标

时间:2011-08-02 14:15:14

标签: oracle

没有任何谷歌搜索似乎找到了这个答案......

我正在尝试修改当前从某些表中提取值并将其移动到其他表的Oracle sproc。

它有一个ROWTYPE变量,定义如下:

myRow my_tbl%ROWTYPE;

现在,sproc执行一些逻辑来填充rowtype变量,然后使用它来填充表:

INSERT INTO MY_TBL
(   col1,
    col2,
    col3,
    -snip-
) 
VALUES (
    myRow.aValue,
    myRow.aValue2,
    myRow.aValu3,
    -snip-
)

我想使用ROWTYPE来填充返回给Web应用程序的游标,而不是填充表。但是,我找不到办法做ROWTYPE - > REF CURSOR转换。这可能吗?如果没有,有没有办法用从各种表中提取的数据手动填充游标并使用一些复杂的逻辑?我正在使用Oracle 10g。

谢谢!

2 个答案:

答案 0 :(得分:3)

关于这一点的棘手部分是你正在使用REF CURSOR,它用于一组行来返回单行的数据。我想你只是这样做是因为你的web应用程序了解ref游标以及如何从Oracle获取它们,而不是对象类型。我也猜测,由于某种原因,你不能只根据需要编写一个选择状态来检索和操作数据(这是最简单的方法,因此有了更多信息,我们可以帮助你实现它)。

我可以通过几种方式来做到这一点,其中没有一个非常漂亮,所以希望其他人能够提出更好的想法。

1)通过从双

中选择计算变量来创建光标
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中创建光标。

答案 1 :(得分:0)

从双重选择将类似于

select  myRow.aValue,
        myRow.aValue2,
        myRow.aValu3
from dual;

您应该可以为此声明一个游标。

http://psoug.org/reference/ref_cursors.html

有一个很好的REF CURSOR写作