PLSQL - Cursor不能在动态sql中使用

时间:2016-03-27 07:41:47

标签: 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_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表中的3列,因此创建一个整个表的ROWTYPE游标对我来说不起作用。 怎么能克服这个? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

从评论中,修复是通过替换行来将光标声明为“弱”引用光标

    p_SiteList  SITE_LIST_TYP;

    p_SiteList  SYS_REFCURSOR;