2016-03-27 83 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;