2012-05-14 35 views
0

我對錶和視圖創建有以下代碼。dbms_sql.to_cursor_number - 爲SYS_REFCURSOR獲取無效光標錯誤

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但他們得到了同樣的錯誤。

回答

3

documentation

後您一個REF CURSOR變量轉換爲SQL遊標數,本地動態SQL操作不能訪問它。

這不是dbms_sql.to_cursor_number是提高誤差,這是因爲fetch datacursor into reader可以datacursor不再被訪問。

+0

非常感謝!我沒有詳細閱讀文檔,但經過多次試驗後我發現了這種行爲。 –