2010-03-05 122 views
4

使用.Net和Oracle 11g - 我已經通過打開遊標從包中的過程返回dataTable。Oracle存儲過程 - 從打開遊標的過程中返回遊標

IE - 'OPEN TABLEREF FOR SOMESQL; TableRef是一個'OUT'參數。它工作得很好。

我正在努力做的是讓第一個Proc調用另一個Proc並讓第二個Proc打開光標。

Inside Proc1(它具有作爲OUT參數的TableRef) - 我正在執行一個Execute Immediate來調用Proc2。 Proc2還將TableRef定義爲out參數,併爲SOMESQL打開TABLEREF。這一切都編譯好 - 但是當我嘗試運行它;我得到以下錯誤:

ORA-00604:在遞歸SQL 1級 ORA-01001錯誤發生:無效光標

誰能告訴我什麼,我做錯了什麼?

編輯 如果我修改我立即執行的語句,包括代替「TABLEREF」我的錯誤改變「OUT TABLEREF」來...... ORA-03113:檔案結尾通信信道

回答

1

當在動態SQL之間傳遞遊標變量時,您可能需要聲明它爲IN OUT

BEGIN 
    EXECUTE IMMEDIATE ' 
    BEGIN 
     EXECUTE IMMEDIATE ''BEGIN OPEN :tableRef FOR SELECT 1 FROM dual; END;'' USING IN OUT :tableRef; 
    END; 
    ' USING IN OUT :tableRef; 
END;