PLSQL-游标不能在动态sql中使用

PLSQL-游标不能在动态sql中使用,plsql,dynamic-sql,Plsql,Dynamic Sql,我有一个用字符串构造的动态SQL查询。 该过程应返回一个“REF CURSOR” 当我尝试打开光标进行查询时,我得到错误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_CO

我有一个用字符串构造的动态SQL查询。 该过程应返回一个“REF CURSOR”

当我尝试打开光标进行查询时,我得到错误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;
光标cu\u站点列表为
选择SEC_NN.SRV_ID
,SEC_NN.SRV_NAME
,第n.SRV\u节通信类型代码
来自Secunn
,COM\u SITE\u STATE\T
其中SEC_NN.SRV_COMTYP_代码1
和SEC_NN.SRV_ID=2;
类型SITE_LIST_TYP为REF游标返回cu_SiteList%行类型;
以下是查询:

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;
p_站点列表站点列表类型;
lv_QueryStr:=“选择SEC_NN.SRV_ID”||
'第n.SRV_节'||
'第二节NN.SRV_COMTYP_代码'||
“来自SEC_NN”||
“网站状态”||
“其中第1部分为代码1”
'和SEC_NN.SRV_MODE_CODE=2'||
'和SEC_NN.SRV_ID=COM_SITE_STATE_T.SRV_ID';
为lv_查询器打开p_站点列表;
正如您所看到的,我只使用SEC_NN表中的3列,所以创建一个作为整个表的行类型的游标对我来说不起作用。 如何克服这一点?
提前感谢。

根据注释,修复方法是通过替换行将光标声明为“弱”参考光标

    p_SiteList  SITE_LIST_TYP;


根据注释,修复方法是通过替换行将游标声明为“弱”引用游标

    p_SiteList  SITE_LIST_TYP;


“当我试图打开光标时,我得到了错误信息”。什么错误?请编辑您的代码,以包含打开光标的代码以及您收到的错误消息。可能与@LukeWoodward重复,我不这么认为,我在前面看到了这篇文章,这就是我的光标的配置方式。更新了原始帖子。任何使用ref游标的东西都可以使用“弱”ref游标吗?(尝试声明
p\u SiteList
类型为
SYS\u REFCURSOR
而不是
SITE\u LIST\u TYP
)如果是,那么这就是您的解决方案。如果没有,那么你可能会被卡住。我想我可以做到。“当我试图打开光标时,我会出错。”。什么错误?请编辑您的代码,以包含打开光标的代码以及您收到的错误消息。可能与@LukeWoodward重复,我不这么认为,我在前面看到了这篇文章,这就是我的光标的配置方式。更新了原始帖子。任何使用ref游标的东西都可以使用“弱”ref游标吗?(尝试声明
p\u SiteList
类型为
SYS\u REFCURSOR
而不是
SITE\u LIST\u TYP
)如果是,那么这就是您的解决方案。如果没有,那么你可能会被卡住。我想我能做到。