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;