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

这是我的程序:
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:无效的号码     
已邀请:
我猜你的“参数”
AND SAL.STATUS in (1, 2, 3)
被放入
txtExtraQuery
。当然,你不能像你那样将它连接到你现有的查询,因为那样你就会将
txtdeptid
txtextraquery
连接起来。这没有任何意义。这就是为什么在与
DEPTS.DEPARTMENTID
进行比较时会出现
ORA-01722
错误的原因 你想要做的是运行
EXECUTE IMMEDIATE
命令。看看这些链接: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm http://www.dba-oracle.com/t_execute_dynamic_pl_sql_procedures.htm 但另一方面,我认为你应该重新设计你的程序。这看起来不太好。为什么不将
VARRAY
或其他
UDT
传递给您的手术?     

要回复问题请先登录注册