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;
我有一个在字符串中构建的动态 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;