首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rowtype变量填充游标

使用rowtype变量填充游标
EN

Stack Overflow用户
提问于 2011-08-02 22:15:14
回答 2查看 2.9K关注 0票数 1

不管用多少谷歌搜索,似乎都找不到这个问题的答案。

我正在尝试修改Oracle存储过程,该存储过程当前从一些表中提取值并将其移动到其他表中。

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

代码语言:javascript
复制
myRow my_tbl%ROWTYPE;

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

代码语言:javascript
复制
INSERT INTO MY_TBL
(   col1,
    col2,
    col3,
    -snip-
) 
VALUES (
    myRow.aValue,
    myRow.aValue2,
    myRow.aValu3,
    -snip-
)

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-02 23:07:55

有关这一点的棘手之处在于,您使用的是引用游标,该游标用于一组行,以便只返回单个行的数据。我想你之所以这样做,是因为你的web应用程序理解引用游标,以及如何从Oracle获取它们,但不理解对象类型。我还猜测,出于某种原因,您不能只编写一条select语句来检索和操作所需的数据(这是最简单的方法,因此,如果有更多信息,我们可能会帮助您实现它)。

我有几种方法可以做到这一点,但都不是很好,所以希望其他人能附和一个更好的想法。

1)通过从dual中选择已计算的变量来创建光标

代码语言:javascript
复制
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创建游标。

票数 3
EN

Stack Overflow用户

发布于 2011-08-02 23:51:12

从dual中选择应该是这样的

代码语言:javascript
复制
select  myRow.aValue,
        myRow.aValue2,
        myRow.aValu3
from dual;

您应该能够为此声明一个游标。

http://psoug.org/reference/ref_cursors.html上有一个很好的引用游标记录

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6913506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档