【问题标题】:dbms_sql.to_cursor_number - Getting Invalid Cursor error for SYS_REFCURSORdbms_sql.to_cursor_number - 获取 SYS_REFCURSOR 的无效游标错误
【发布时间】:2012-05-14 04:34:38
【问题描述】:

我有以下用于创建表和视图的代码。

create table test_company
(
    comp_id number
    , comp_name varchar2(500)
)
;
insert into test_company values(1, 'CompanyA');
insert into test_company values(2, 'CompanyB');
insert into test_company values(3, 'CompanyC');
create or replace view test_company_view as select * from test_company;

我的光标测试有以下代码。但是dbms_sql.to_cursor_number 出现错误ORA-01001: invalid cursor

set serveroutput on;
declare
    reader test_company_view%ROWTYPE;
    datacursor SYS_REFCURSOR;
    v_cursor_id number;
begin
    open datacursor for select * from test_company_view;
    v_cursor_id := dbms_sql.to_cursor_number(datacursor); -- ERROR: invalid cursor
    loop fetch datacursor into reader;
        exit when datacursor%NOTFOUND;
        dbms_output.put_line(reader.comp_id);
    end loop;
    close datacursor;
end;

我做错了什么?感谢您的帮助!

我尝试过strongly-typed REF CURSORweakly-typed REF CURSOR,但他们得到了同样的错误。

【问题讨论】:

    标签: oracle cursor sys-refcursor


    【解决方案1】:

    来自documentation

    将 REF CURSOR 变量转换为 SQL 游标号后,本机动态 SQL 操作无法访问它。

    引发错误的不是dbms_sql.to_cursor_number,而是fetch datacursor into reader,因为无法再访问datacursor

    【讨论】:

    • 非常感谢!我没有详细阅读文档,但经过多次试验我发现了这种行为。
    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多