Вызов процедуры оракула с необязательным параметром с помощью nhibernate

У меня есть такая процедура:

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

Чтобы отладить это в PL-SQL, я делаю:

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

И он отображается в Nhibernate внутри файла hbm:

<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?

Спасибо.


person Fernando    schedule 15.03.2013    source источник
comment
Какой SQL сгенерировал NHibernate, когда вы получили это сообщение об ошибке?   -  person mickfold    schedule 16.03.2013
comment
Разве это не query.setstring?   -  person Rippo    schedule 16.03.2013
comment
Нужно увидеть исходный код MyProc. вызывает MyPackage.MyProc(param2 => '20130301'); на plsql работает нормально?   -  person Mohsen Heydari    schedule 16.03.2013
comment
Rippo: нет, вызов setparameter для каждого параметра работает нормально.   -  person Fernando    schedule 18.03.2013
comment
М.Хейдари: На plsql все нормально, проц работает нормально.   -  person Fernando    schedule 18.03.2013
comment
penfold: хорошая идея, попробую перехватить сгенерированный sql, ткс.   -  person Fernando    schedule 18.03.2013
comment
Используйте параметр конфигурации show_sql=true. NHibernate отправит весь сгенерированный SQL на консоль. См. здесь для получения дополнительной информации.   -  person mickfold    schedule 19.03.2013


Ответы (1)


Как я делаю это в производственном коде прямо сейчас

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

а затем из кода С#

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

Как обычно, ShowSQL или замечательный профайлер NHibernate от Ayende — ваши друзья.

person guillem    schedule 30.03.2013