2

这是功能:

FUNCTION GET_ALL(P_USER_ID IN VARCHAR2) RETURN SYS_REFCURSOR IS
   C SYS_REFCURSOR;
BEGIN
    OPEN C
    FOR 'SELECT * FROM XYZ WHERE USER_ID = :P_USER_ID'
    USING P_USER_ID;

    RETURN C;
END;

我正在尝试使用 NHibernate 调用此函数,如下所示:

Session
    .CreateSQLQuery("BEGIN ? = PKG.GET_ALL(:P_USER_ID); END;")
    .SetString("P_USER_ID", "SOMEONE")
    .List<XYZ>();

欢迎任何代码、提示或烟雾标志。

PS:我正在使用 NHibernate 3.3.0.GA

4

1 回答 1

1

来自官方文档

对于 Oracle,适用以下规则:

函数必须返回结果集。过程的第一个参数必须是返回结果集的 OUT。这是通过在 Oracle 9 或 10 中使用 SYS_REFCURSOR 类型来完成的。在 Oracle 中,您需要定义 REF CURSOR 类型,请参阅 Oracle 文献。

在https://github.com/nhibernate/nhibernate-core/tree/master/src/NHibernate.Test/SqlTest/Custom/Oracle上有带有完整映射和存储过程代码的工作测试

于 2013-06-24T22:53:37.773 回答