NHibernate通过ref_游标从存储过程获取数据

NHibernate通过ref_游标从存储过程获取数据,nhibernate,fluent-nhibernate,mapping,ref-cursor,ora-06553,Nhibernate,Fluent Nhibernate,Mapping,Ref Cursor,Ora 06553,我也很难通过ref_游标从存储过程中获取数据。 也许你可以建议你如何解决这个问题- 我的错误: “ORA-06553:PLS-306:调用“获取样本列表”时参数的数量或类型错误” 我想call中的参数类型就是问题所在 这是我的密码: HBM 会话配置-虽然流畅,但仍然相同: m_Factory = Fluently.Configure() //cfgRules .Database(OracleClientConfiguration.Oracle10.

我也很难通过ref_游标从存储过程中获取数据。 也许你可以建议你如何解决这个问题-

我的错误: “ORA-06553:PLS-306:调用“获取样本列表”时参数的数量或类型错误” 我想call中的参数类型就是问题所在

这是我的密码:

HBM

会话配置-虽然流畅,但仍然相同:

       m_Factory  = Fluently.Configure()  //cfgRules
              .Database(OracleClientConfiguration.Oracle10.Dialect("NHibernate.Dialect.Oracle10gDialect")
           .ConnectionString(x => x.FromConnectionStringWithKey("MyDBCONNSTRING"))
             .Driver<NHibernate.Driver.OracleDataClientDriver>().ShowSql())
             .ExposeConfiguration(c => c.Properties.Add("hbm2ddl.keywords", "none"))
            .Mappings(m =>
           {
               m.FluentMappings.AddFromAssemblyOf<MyEntityMapping>();
               m.HbmMappings.AddFromAssemblyOf<MyHBMMapping>();
               m.MergeMappings();
           })
           .BuildConfiguration()
           .BuildSessionFactory();

任何帮助都将被告知

我已经有一段时间没有在Oracle中使用NHibernate了,但我似乎还记得这样一个事实,即除非ref_cursor存储过程参数的名称是一个特定的值(尝试用谷歌搜索这些行),并且它是proc的第一个参数(就像您的一样),否则它不起作用.

REF CURSOR
必须是过程中的第一个参数(
pCursor OUT ReferenceCursor
):

包体

PROCEDURE usp_GetDual
    (
          pCursor OUT ReferenceCursor,
          a IN CHAR,
          b IN CHAR
    )

  IS

    err_code NUMBER;
    err_msg VARCHAR2(200);

  BEGIN

  OPEN pCursor FOR
    SELECT * FROM dual;

   EXCEPTION
    WHEN OTHERS THEN 
        err_code := SQLCODE;
        err_msg := substr(SQLERRM, 1, 200);

END usp_GetDual;
以及您的映射XML:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyAssembly">
    <sql-query name="GetDaul">
        { call MYPACKAGE.usp_GetDual ( :a, :b ) }
    </sql-query>
</hibernate-mapping>

{调用MYPACKAGE.usp_GetDual(:a,:b)}
现在,您可以简单地使用以下命令进行查询:

var value = Session.GetNamedQuery("GetDaul")
    .SetParameter<string>("a", "AAA")
    .SetParameter<string>("b", "BBB")
    .UniqueResult();
var value=Session.GetNamedQuery(“GetDaul”)
.SetParameter(“a”、“AAA”)
.SetParameter(“b”、“BBB”)
.UniqueResult();
你可以找到更好的解释


这可能有助于您理解问题。

REF CURSOR
必须是过程中的第一个参数(
pCursor OUT ReferenceCursor
):

包体

PROCEDURE usp_GetDual
    (
          pCursor OUT ReferenceCursor,
          a IN CHAR,
          b IN CHAR
    )

  IS

    err_code NUMBER;
    err_msg VARCHAR2(200);

  BEGIN

  OPEN pCursor FOR
    SELECT * FROM dual;

   EXCEPTION
    WHEN OTHERS THEN 
        err_code := SQLCODE;
        err_msg := substr(SQLERRM, 1, 200);

END usp_GetDual;
以及您的映射XML:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyAssembly">
    <sql-query name="GetDaul">
        { call MYPACKAGE.usp_GetDual ( :a, :b ) }
    </sql-query>
</hibernate-mapping>

{调用MYPACKAGE.usp_GetDual(:a,:b)}
现在,您可以简单地使用以下命令进行查询:

var value = Session.GetNamedQuery("GetDaul")
    .SetParameter<string>("a", "AAA")
    .SetParameter<string>("b", "BBB")
    .UniqueResult();
var value=Session.GetNamedQuery(“GetDaul”)
.SetParameter(“a”、“AAA”)
.SetParameter(“b”、“BBB”)
.UniqueResult();
你可以找到更好的解释


这可能有助于您理解事物。

您的意思是什么-ref\u cursor存储过程参数的名称是一个特定值?您的意思是什么-ref\u cursor存储过程参数的名称是一个特定值?