Dyanamic Query, передав строку в качестве условия для проверки - PullRequest
0 голосов
/ 31 марта 2011

Это моя процедура:

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 Ответ

1 голос
/ 31 марта 2011

Я предполагаю, что ваш "параметр" AND SAL.STATUS in (1, 2, 3) помещен в txtExtraQuery.Конечно, вы не можете объединить это с существующим запросом, как вы это сделали, потому что тогда вы объедините txtdeptid с txtextraquery.И это не имеет никакого значения.Вот почему вы получаете ошибку ORA-01722, сравнивая ее с DEPTS.DEPARTMENTID

. Вы хотите выполнить команду EXECUTE IMMEDIATE.Проверьте эти ссылки:

Нос другой стороны, я думаю, что вы должны изменить дизайн вашей процедуры.Это выглядит не очень хорошо.Почему бы не передать VARRAY или какой-либо другой UDT в вашу процедуру?

...