2016-03-27 105 views
0

我有一個動態SQL查詢,它是用字符串構造的。 該過程應該返回'REF CURSOR'。PLSQL - 遊標不能用於動態sql

我收到錯誤PLS-00455當我嘗試打開查詢的遊標。

光標定義

CURSOR cu_SiteList IS 
    SELECT SEC_NN.SRV_ID 
     ,SEC_NN.SRV_NAME 
     ,SEC_NN.SRV_COMTYP_CODE 
    FROM SEC_NN 
     ,COM_SITE_STATE_T 
    WHERE SEC_NN.SRV_COMTYP_CODE <> 1 
    AND SEC_NN.SRV_ID = 2; 

    TYPE SITE_LIST_TYP IS REF CURSOR RETURN cu_SiteList%ROWTYPE; 

下面是該查詢:

p_SiteList SITE_LIST_TYP; 
     lv_QueryStr := ' SELECT SEC_NN.SRV_ID ' || 
         ' ,SEC_NN.SRV_NAME ' || 
         ' ,SEC_NN.SRV_COMTYP_CODE ' || 
        ' FROM SEC_NN_, ' || 
           ' COM_SITE_STATE_T ' || 
          ' WHERE SEC_NN.SRV_COMTYP_CODE <> 1 ' || 
           ' AND SEC_NN.SRV_MODE_CODE = 2' || 
           ' AND SEC_NN.SRV_ID = COM_SITE_STATE_T.SRV_ID'; 

OPEN p_SiteList FOR lv_QueryStr; 

正如你可以看到我只用3列從SEC_NN表,所以創建的遊標的一個ROWTYPE整個桌子都不適合我。 如何克服這一點? 在此先感謝。

+0

更換線

p_SiteList SITE_LIST_TYP; 

「我得到的錯誤,當我嘗試打開遊標'。 **什麼錯誤?**請編輯您的代碼以包含打開遊標的代碼以及您收到的錯誤消息。 –

+0

[爲什麼我們不能使用動態SQL語句的強引用?](http://stackoverflow.com/questions/2783461/why-cant-we-use-strong-ref-cursor-with-dynamic -sql-statement) –

+0

@LukeWoodward,我不這麼認爲,我之前看到過這個帖子,這是我的光標配置的方式。更新原始帖子。 –

回答

2

從意見,解決辦法是宣佈光標作爲一個「弱」 REF光標,用

p_SiteList SYS_REFCURSOR;