【问题标题】:Dynamic PL/SQL function动态 PL/SQL 函数
【发布时间】:2015-04-09 10:12:32
【问题描述】:

我正在尝试使用以下 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

谁能告诉我这里有什么错误以及我应该怎么做?

提前致谢。

【问题讨论】:

  • 使用DBMS_OUTPUT.PUT_LINE并在执行前检查查询形式。
  • 你如何在JDBC中调用你的函数?
  • 哦等等,你的函数肯定有编译错误。有两个 END 语句。

标签: oracle plsql oracle11g dynamic-sql


【解决方案1】:
    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 并在代码中实际执行之前先检查查询格式是一个很好的做法。

【讨论】:

    猜你喜欢
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2020-08-13
    相关资源
    最近更新 更多