Sql ORA-00904:无效标识符(SP)

Sql ORA-00904:无效标识符(SP),sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我试图编写一个存储过程: Procedure get_cont( docNum in number default null, state in number default null, department in varchar2, dateF in varchar2 default nu

我试图编写一个存储过程:

Procedure get_cont(
                          docNum in number default null,
                          state in number default null,
                          department in varchar2,
                          dateF in varchar2 default null,
                          IOCURSOR OUT v_cursor)
IS
vSelectCursor varchar2(10000);

BEGIN

    vSelectCursor :=    'SELECT DISTINCT(cb.DOC_NUM),
                                 to_char(cb.DATE_INIT,''DD/MM/YYYY'') date_init,                     
                                 cb.DEPT,
                                 dt.STATE,
                                 dt.NAME
                         FROM department cb,
                              db_book dt
                         WHERE cb.code = dt.code
                               AND cb.DEST = ''MIT2'' 
                                 ';

    IF docNum IS NOT NULL THEN               
         vSelectCursor := vSelectCursor || ' AND det.DOC_NUM = ' || docNum ;
    END IF;
    IF state <> -1 THEN               
         vSelectCursor := vSelectCursor || ' AND cb.STATE = ' || state ;
    END IF;
    IF department <> '-' THEN               
         vSelectCursor := vSelectCursor || ' AND cb.DEPT = ' || department;  --this statement is incorrect
    END IF;

   OPEN IOCURSOR FOR vSelectCursor;
END;

在生成的查询中,您需要将department is单引号括起来,因为它是一个字符串,其中其他都是数字:

IF department <> '-' THEN               
    vSelectCursor := vSelectCursor || ' AND cb.DEPT = ''' || department || '''';
END IF;
如果部门为“-”,则
vSelectCursor:=vSelectCursor | |和cb.DEPT=''| | |'';
如果结束;
IF department <> '-' THEN               
    vSelectCursor := vSelectCursor || ' AND cb.DEPT = ''' || department || '''';
END IF;