Oracle通过命名查询使用NHibernate仅更新存储过程
我有一个只执行更新的Oracle存储过程。这是一个遗留的存储过程,我必须使用它。这是无法改变的 我可以使用Nhibernate fine从C调用并执行它,如下所示:Oracle通过命名查询使用NHibernate仅更新存储过程,nhibernate,oracle11g,nhibernate-mapping,Nhibernate,Oracle11g,Nhibernate Mapping,我有一个只执行更新的Oracle存储过程。这是一个遗留的存储过程,我必须使用它。这是无法改变的 我可以使用Nhibernate fine从C调用并执行它,如下所示: var query = Session.CreateSQLQuery("call myPackage.mySproc(:param1, :param2, :param3)"); query.SetInt64("param1", 123456); query.SetInt64("param2", 654321); query.Exec
var query = Session.CreateSQLQuery("call myPackage.mySproc(:param1, :param2, :param3)");
query.SetInt64("param1", 123456);
query.SetInt64("param2", 654321);
query.ExecuteUpdate();
如果可能的话,我更喜欢使用命名查询。我尝试了以下方法:
Session
.GetNamedQuery("myNamedQuery")
.SetInt64("param1", 123456)
.SetInt64("param2", 654321)
.ExecuteUpdate();
其中,我的命名查询如下所示:
<sql-query name="myNamedQuery">
{ call myPackage.mySproc(:param1, :parm2) }
</sql-query>
当我尝试此操作时,会出现以下错误:
无法执行本机批量操作查询
除了内部例外:
ORA-06550:第1行第7列:PLS-00306:错误的编号或类型
调用“mySproc”ORA-06550的参数:第1行第7列:PL/SQL:
忽略语句
现在我已经仔细检查了我的参数列表,它在代码、映射xml和存储过程本身中匹配
我走远了吗?这可能吗?即使没有返回数据,映射中是否也需要一个?它只执行SQL更新。您是否尝试过:
<sql-query name="myNamedQuery">
{ call myPackage.mySproc(:param1, :param2, :param3) }
</sql-query>
18.2.2.1。使用存储过程的规则/限制
。。。
*对于Oracle,以下规则适用:
函数必须返回结果集。过程的第一个参数必须是返回结果集的OUT。这是通过在Oracle 9i或更高版本中使用SYS_REFCURSOR类型来完成的。在Oracle中,您需要定义REF游标类型,请参阅Oracle文献*