c# - Oracle 存储过程、SYS_REFCURSOR 和 NHibernate

标签 c# oracle nhibernate stored-procedures

我有一个正在连接的旧 Oracle (10.2g) 数据库,我想使用 NHibernate (2.0.1) 从存储过程中返回对象。有问题的存储过程使用 SYS_REFCURSOR 返回结果。根据documentation这应该是可行的,但我找到了 few posts互联网上有其他建议。

这是我解释的代码:

映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
assembly="OracleStoredProcedures" namespace="OracleStoredProcedures">
    <class name="Person" mutable="false">
        <id name="PersonCode" type="AnsiString" column="PERSONCODE">
            <generator class="assigned" />
        </id>
        <property name="Name" type="String" column="PERSON_NAME" />
        <property name="Surname" type="String" column="PERSON_SURNAME" />
    </class>

    <sql-query name="getpeople">
        <return class="Person" />

        EXEC RS_DB.GETPERSONTEST 

    </sql-query>
</hibernate-mapping>

存储过程:

CREATE OR REPLACE PROCEDURE RS_DB.GETPERSONTEST (
   io_cursor   IN OUT   sys_refcursor
)
IS
BEGIN
   OPEN io_cursor FOR
      SELECT PERSONCODE, PERSON_NAME, PERSON_SURNAME
      FROM PEOPLE

END GETPERSONTEST;

最佳答案

这是多么痛苦的事情啊。这终于奏效了。我把存储过程变成了一个函数。函数返回 sys_refcursor。使用类似的映射作为 OP 和名称查询,如下所示。

<sql-query name="getpeople">
 <return class="Person" />

 { ? = call RS_DB.GETPERSONTEST }
</sql-query>

Link

关于c# - Oracle 存储过程、SYS_REFCURSOR 和 NHibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/635848/

相关文章:

c# - 创建 DAL 对象的建议

c# - C#正则表达式中的外文字符

c# - 在反序列化期间将 JSON 日期转换为 .NET DateTime 的正确方法

sql - oracle 中的前 10 行

oracle - 我可以更改 Oracle 中的隔离级别吗?

.net - ORM For .Net ON Oracle

c# - 如何更改 VS2008 中的智能感知设置?

nhibernate - 是否可以通过 odbc 连接使用(流畅)nhibernate?

c# - 使用 NHibernate 在 SQL 数据库中存储字节数组的最佳方法是什么?

oracle - SQL 将数据从下划线分隔转换为 CamelCase