Dyanamic Query, передав строку в качестве условия для проверки

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

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

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

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

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

Другие вопросы по тегам