NHibernate通过ref_游标从存储过程获取数据
我也很难通过ref_游标从存储过程中获取数据。 也许你可以建议你如何解决这个问题- 我的错误: “ORA-06553:PLS-306:调用“获取样本列表”时参数的数量或类型错误” 我想call中的参数类型就是问题所在 这是我的密码: HBM 会话配置-虽然流畅,但仍然相同: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.
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存储过程参数的名称是一个特定值?