简体   繁体   English

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

[英]How to execute an Oracle function that returns a sys_refcursor using NHibernate?

This is the function: 这是功能:

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;

I'm trying to call this function using NHibernate, like this: 我正在尝试使用NHibernate调用此函数,如下所示:

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

Any code, tips or smoke signs are welcome. 欢迎任何代码,提示或烟熏迹象。

PS: I'm using NHibernate 3.3.0.GA PS:我正在使用NHibernate 3.3.0.GA

From the official docs : 官方文档

For Oracle the following rules apply: 对于Oracle,适用以下规则:

A function must return a result set. 函数必须返回结果集。 The first parameter of a procedure must be an OUT that returns a result set. 过程的第一个参数必须是返回结果集的OUT。 This is done by using a SYS_REFCURSOR type in Oracle 9 or 10. In Oracle you need to define a REF CURSOR type, see Oracle literature. 这是通过在Oracle 9或10中使用SYS_REFCURSOR类型完成的。在Oracle中,您需要定义REF CURSOR类型,请参见Oracle文献。

There are working tests with full mapping and stored procedure code at https://github.com/nhibernate/nhibernate-core/tree/master/src/NHibernate.Test/SqlTest/Custom/Oracle https://github.com/nhibernate/nhibernate-core/tree/master/src/NHibernate.Test/SqlTest/Custom/Oracle中有具有完整映射和存储过程代码的有效测试

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM