Oracle通过命名查询使用NHibernate仅更新存储过程

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

我有一个只执行更新的Oracle存储过程。这是一个遗留的存储过程,我必须使用它。这是无法改变的

我可以使用Nhibernate fine从C调用并执行它,如下所示:

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文献*