2011-03-31 31 views
-1

這是我的程序:Dyanamic查詢通過傳遞一個String作爲Conditon檢查

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改變我希望從前端傳遞本身。

雖然excuting此查詢我正在和錯誤

ORA-01722的:無效的數量

回答

1

我猜你的 「參數」 AND SAL.STATUS in (1, 2, 3)投入txtExtraQuery。當然,你不能像你那樣連接到你現有的查詢,因爲那樣你會連接txtdeptidtxtextraquery。這沒有任何意義。這就是爲什麼你得到一個ORA-01722錯誤,當與DEPTS.DEPARTMENTID

比較時,你想要做的是運行一個EXECUTE IMMEDIATE命令。看看這些鏈接:

但在另一方面,我認爲你應該重新設計你的程序。這看起來不太好。爲什麼不通過VARRAY或其他UDT到您的程序?