动态PL / SQL功能

时间:2015-04-09 10:12:33

标签: oracle plsql oracle11g dynamic-sql

我试图使用以下PL / SQL函数 - oracle。

FUNCTION GET_RECORDS_FOR_REFRESH( KEY_ARRAY IN VARCHAR2 ) RETURN SYS_REFCURSOR

    IS  RET_DATA SYS_REFCURSOR;
        SQL_QUEURY VARCHAR2(32767);

    BEGIN

        SQL_QUEURY:= 'SELECT * FROM PASSESNGERS WHERE ' || KEY_ARRAY ;

        OPEN RET_DATA FOR SQL_QUEURY;

        RETURN RET_DATA;

    END; 
END;

KEY_ARRAY包含附加了列名的逗号分隔值。例如KEY_ARRAY =' PAS_PROF_ID IN(15236,85694,45863,59456,42387)'

虽然此函数没有编译错误,但在运行时会导致错误。

java.sql.SQLException: ORA-06550: line 1, column 62:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

   . ( * % & = - + ; < / > at in is mod remainder not rem
   <an exponent (**)> <> or != or ~= >= <= <> and or like like2
   like4 likec between || multiset member submultiset

有人可以告诉我这里的错误是什么,我该怎么办?

提前致谢。

1 个答案:

答案 0 :(得分:2)

    END; 
END;

这可能很愚蠢,但我发现你共享的PL / SQL代码中有两个END语句。这可能就是你获得PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following的原因。

  

虽然此函数没有编译错误,但在运行时会导致错误。

PLS错误是编译时错误。删除其中一个 END ,然后重新编译

此外,最好使用DBMS_OUTPUT.PUT_LINE并在代码中实际执行查询之前先检查查询格式。