NHibernate вызывает хранимую процедуру Oracle с префиксом схемы, как?

У меня есть NHibernate, вызывающая хранимую процедуру в Oracle, работающую в настоящее время. Однако как мне указать префикс схемы в синтаксисе {call} в теге?

Я пытался

<sql-query name="my_sproc">
<return class="my_sproc_class" />
    {call schema2.my_sproc (:p1)}
</sql-query>

Но среда выполнения NHibernate вернулась с тем, что 'schema2' не определена, а 'schema2' - это определенно определенная схема в моей базе данных Oracle.

благодаря.


person Niner    schedule 26.07.2010    source источник


Ответы (2)


Могли ли быть привилегии? Процедура может существовать в этой схеме, но у вас может не быть привилегий для ее выполнения или у вас могут быть привилегии через роль, которая не включена.

Могут быть параметры. Если процедура ожидает два параметра (или является функцией), то попытка вызвать ее с одним может получить ошибку «Не существует», когда на самом деле это означает «Нет ни одного, который я мог бы вызвать с одним параметром».

Последний вариант - если в вашей схеме есть пакет с тем же именем, что и у другой схемы. Может случиться с чем-то общим, например "UTILS". Если вы попросите Oracle выполнить UTILS.PROC и у вас есть пакет UTILS, он будет искать в пакете и выдавать ошибку, если не находит ее, даже если существует схема UTILS с процедурой PROC.


Отредактировано для добавления

В этом случае я склоняюсь к проблеме параметров. Пример здесь кажется использовать ? в качестве заполнителя параметра.

person Gary Myers    schedule 26.07.2010
comment
Я могу выполнить exec schem1.my_sproc (: p1) в sqldeveloper без каких-либо ошибок, поэтому это не должно быть связано с привилегиями (с использованием того же входа в систему). И никаких пакетов в этом нет. - person Niner; 27.07.2010

Я мог ошибаться здесь, но я думал, что NHibernate требует, чтобы все UDF / SPROCS имели префикс «dbo»; {call dbo.schema2.my_sproc (:p1)} работает?

person DanP    schedule 28.07.2010