如何使用NHibernate执行返回sys_refcursor的Oracle函数?

时间:2013-06-24 21:45:20

标签: oracle nhibernate

这是功能:

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

1 个答案:

答案 0 :(得分:1)

来自official docs

  

对于Oracle,以下规则适用:

     
    

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

  

https://github.com/nhibernate/nhibernate-core/tree/master/src/NHibernate.Test/SqlTest/Custom/Oracle

处有完整映射和存储过程代码的工作测试