这是功能:
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
答案 0 :(得分:1)
对于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
处有完整映射和存储过程代码的工作测试