У меня есть NHibernate, вызывающая хранимую процедуру в Oracle, работающую в настоящее время. Однако как мне указать префикс схемы в синтаксисе {call} в теге?
Я пытался
<sql-query name="my_sproc">
<return class="my_sproc_class" />
{call schema2.my_sproc (:p1)}
</sql-query>
Но среда выполнения NHibernate вернулась с тем, что 'schema2' не определена, а 'schema2' - это определенно определенная схема в моей базе данных Oracle.
благодаря.
Ответ 1 · Gary Myers
Могли ли быть привилегии? Процедура может существовать в этой схеме, но у вас может не быть привилегий для ее выполнения или у вас могут быть привилегии через роль, которая не включена.
Могут быть параметры. Если процедура ожидает два параметра (или является функцией), то попытка вызвать ее с одним может получить ошибку "Не существует", когда на самом деле это означает "Нет ни одного, который я мог бы вызвать с одним параметром".
Последний вариант - если в вашей схеме есть пакет с тем же именем, что и у другой схемы. Может случиться с чем-то общим, например "UTILS". Если вы попросите Oracle выполнить UTILS.PROC и у вас есть пакет UTILS, он будет искать в пакете и выдавать ошибку, если не находит ее, даже если существует схема UTILS с процедурой PROC.
Отредактировано для добавления
В этом случае я склоняюсь к проблеме параметров. Пример здесь кажется использовать ? в качестве заполнителя параметра.
Ответ 2 · DanP
Я мог ошибаться здесь, но я думал, что NHibernate требует, чтобы все UDF / SPROCS имели префикс "dbo"; {call dbo.schema2.my_sproc (:p1)} работает?