【问题标题】:Calling an oracle procedure with optional parameter with nhibernate使用 nhibernate 调用带有可选参数的 oracle 过程
【发布时间】:2013-03-04 07:54:53
【问题描述】:

我有这样的程序:

Procedure MyProc(param1 IN VARCHAR2 default 'default_value', param2 IN VARCHAR2 default null);      

要在我正在做的 PL-SQL 中调试它:

MyPackage.MyProc(param2 => '20130301');

它被映射到 Hbm 文件中的 Nhibernate 中:

<sql-query name="MyMappedProc">
   <![CDATA[  call MyPackage.MyProc(param2 => :parametro2); ]]>
</sql-query>

并在应用程序中被调用:

_Query = Session.GetNamedQuery("MyMappedProc");
_Query.SetParameter("parametro2", "value_var");

var lista = _Query.List<object>();

我遇到了这个错误:

{"ORA-00907: missing right parenthesis"}

有没有办法用 NHibernate 调用带有可选参数的过程?

谢谢。

【问题讨论】:

  • 当您收到此错误消息时,NHibernate 生成了什么 SQL?
  • 不是query.setstring吗?
  • 需要看MyProc源码。正在调用 MyPackage.MyProc(param2 => '20130301');在 plsql 上工作正常吗?
  • Rippo:不,为每个参数调用 setparameter 都可以。
  • 使用配置选项 show_sql=true。 NHibernate 会将所有生成的 SQL 发送到控制台。请参阅here 了解更多信息。

标签: oracle nhibernate plsql procedure optional


【解决方案1】:

我现在如何在生产代码中执行此操作

<sql-query name="Recalc">
    CALL P_DATA.RECALC.CONST_QUERY(:map, :id)
</sql-query>

然后从 C# 代码

session.GetNamedQuery("Recalc").SetParameter("id", this.id)
    .SetParameter("map", "MyMap").ExecuteUpdate();

像往常一样,ShowSQL 或 marvelous Ayende's NHibernate profiler 是你的朋友

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2011-10-08
    • 2018-04-24
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多