PLSQL - 游标不能用于动态 sql

PLSQL - Cursor cannot be used in dynamic sql

我有一个在字符串中构建的动态 SQL 查询。 程序应该return一个'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;

这里是查询:

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;

如您所见,我只使用了 SEC_NN table 中的 3 列,因此创建一个作为整个 table 的 ROWTYPE 的游标对我来说不起作用。 如何克服这一点? 提前致谢。

根据评论,修复方法是将游标声明为 'weak' 引用游标,方法是替换行

    p_SiteList  SITE_LIST_TYP;

    p_SiteList  SYS_REFCURSOR;