通过传递字符串作为检查条件的动态查询

时间:2011-03-31 07:23:19

标签: oracle stored-procedures parameters ora-01722

这是我的程序:

PROCEDURE SP_SALARYADVANCE_RPT_TEST
  (
    txtExtraQuery IN STRING,
    refcur OUT sys_refcursor )
OPEN refcur FOR
    SELECT DISTINCT( SAL.ADVANCENO ), SALARYADVANCEID, SAL.TRANSDATE, SAL.APPROVEDREMARKS, SAL.APPROVEDAMOUNT, SAL.PAYRECAMOUNT, EMP.EMPLOYEENAME, EMP.EMPLOYEECODE
      FROM HRM_SALARYADVANCE SAL, HRM_EMPLOYEE EMP, HRM_EMPLOYEEDEPARTMENTS DEPTS
      WHERE SAL.EMPLOYEEID     = EMP.EMPLOYEEID AND
        SAL.EMPLOYEEID     = DEPTS.EMPLOYEEID AND
        DEPTS.DEPARTMENTID = txtdeptid || txtextraquery; 

我的问题是我发送AND SAL.STATUS in (1,2,3)作为参数这个1,2,3可能会改变我希望从前端传递它。

在解决此查询时,我收到了错误

  

ORA-01722:无效号码

1 个答案:

答案 0 :(得分:1)

我猜你的“参数”AND SAL.STATUS in (1, 2, 3)已放入txtExtraQuery。当然,你不能像现在这样将它连接到现有的查询,因为那样你就会txtdeptidtxtextraquery连接起来。这没有任何意义。这就是为什么在与ORA-01722

进行比较时出现DEPTS.DEPARTMENTID错误的原因

您要执行的是运行EXECUTE IMMEDIATE命令。看看这些链接:

但另一方面,我认为你应该重新设计你的程序。这看起来不太好。为什么不将VARRAY或其他UDT传递给您的程序?

相关问题