Вызов процедуры хранилища Oracle с помощью nHibernate - PullRequest
1 голос
/ 30 октября 2009

У меня есть хранимая процедура в Oracle:

procedure Test(results OUT gencursor, id in number) is
  v_cursor gencursor;
begin
OPEN v_cursor FOR
          select id, name, age from tblcustomers s where s.id = id;
results:=v_cursor;
end Test;

Теперь я хотел бы выполнить эту процедуру, используя nHibernate ISession.CreateSQLQuery. Все примеры, которые я видел до сих пор, используют ISession.GetNamedQuery().

Итак, я хотел бы сделать что-то вроде (ToDataTable - это мой собственный метод расширения на IQuery, у меня есть больше методов расширения, которые я бы хотел использовать в сочетании с хранимыми процедурами):

        var result = session
            .CreateSQLQuery("call MyPackage.Test(:id)")
            .SetDecimal("id", 33)
            .ToDataTable();

Приведенный выше код выдает следующее исключение:

"не удалось выполнить запрос [вызов MyPackage.Test (?)] Имя: id - Значение: 33 [SQL: call MyPackage.Test (?)] "

Я также пробовал:

        var result = session
            .CreateSQLQuery("call MyPackage.Test(:result, :id)")
            .SetDecimal("id", 33)
            .ToDataTable();

Тот бросает исключение:

Не все названные параметры были set: [result] [call MyPackage.Test (: result, : Идентификатор)]

Ответы [ 2 ]

2 голосов
/ 30 октября 2009

Сейчас нет, если вы можете вызывать sps из CreateSQLQuery, но я покажу вам, как мы вызываем sps Oracle из NHibernate в моем текущем проекте:

var query =  _session.GetNamedQuery("MyPackageTestSp");
            query.SetParameter("id", 33);
            query.ExecuteUpdate();

В файле отображения именованный запрос определяется следующим образом:

<sql-query name="MyPackageTestSp">
    call MyPackage.Test(:result, :id)
</sql-query>

Работает как шарм: -)

0 голосов
/ 30 октября 2009

Мне было проще просто использовать вид. В вашем отображении просто установите mutable = false для вашего класса, чтобы он не мог быть обновлен. Представление должно создать уровень абстракции, которого вы пытаетесь достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...