java - 调用返回游标的存储函数

Posted

技术标签:

【中文标题】java - 调用返回游标的存储函数【英文标题】:java - Calling Stored Function That Returns a Cursor 【发布时间】:2015-08-27 15:03:21 【问题描述】:

我有一个存储函数设置如下:

CREATE OR REPLACE PACKAGE PACKAGENAME IS
FUNCTION READ_FUNC(i_name IN VARCHAR2)
    RETURN SYS_REFCURSOR;
END PACKAGENAME;
/
CREATE OR REPLACE PACKAGE BODY PACKAGENAME AS
FUNCTION
READ_FUNC(i_name IN VARCHAR2)
RETURN SYS_REFCURSOR
IS
    cursor SYS_REFCURSOR;
BEGIN
    //do stuff
    RETURN cursor;
END READ_FUNC;

我试图在 Java 中如下调用它,但我得到了not a valid function or procedure name

try(CallableStatement stmt = conn.prepareCall("call PACKAGENAME.READ_FUNC(?)")

    stmt.setString(1, name);
    ResultSet result = stmt.executeQuery();
    // do stuff with result

它肯定存在,因为我可以desc PACKAGENAME 并且它有我的功能。我还能够调用其他程序。有谁知道我做错了什么?

【问题讨论】:

【参考方案1】:

尝试以下方法:

CallableStatement stmt = conn.prepareCall(" ? = call PACKAGENAME.READ_FUNC(?) ");
stmt.registerOutParameter(1, OracleTypes.CURSOR);
stmt.setString(2, name);

【讨论】:

以上是关于java - 调用返回游标的存储函数的主要内容,如果未能解决你的问题,请参考以下文章

Oracle03——游标异常存储过程存储函数触发器和Java代码访问Oracle对象

如何存储将返回ref光标的函数的结果?

java使用mybatis 调用存储过程返回一个游标结果集

java使用mybatis 调用存储过程返回一个游标结果集

oracle-游标-存储过程-函数-包

oracle 存储过程执行动态SQL 返回结果给游标,外部程序获得dataset结果集。