Вызов функции Oracle со «сложным» возвращаемым значением из C # - PullRequest
0 голосов
/ 18 марта 2010

У меня есть функция Oracle, возвращающая запись, определенную в пакете, так что можно сделать:

select a,b,c FROM my_function(...);

Вызов этой функции оракула из .NET так же прост, как выполнение обычного SQL-запроса.

К сожалению, функция должна делать обновления сейчас, и когда она вызывается таким образом, Oracle жалуется, что обновления не разрешены внутри выбора, и это имеет смысл. Так что теперь у меня есть выбор: изменить вызов функции или разделить функцию. В основном я должен избавиться от выбора в вызове функции и нужно что-то вроде этого в C #:

EXEC :var:= my_func(...);

где тип var - это пользовательский кортеж, определенный в пакете. Я уже пытался использовать ParameterDirection.ReturnValue без успеха. У кого-нибудь есть идея?

Ответы [ 2 ]

1 голос
/ 18 марта 2010

Вы можете сначала выполнить свою функцию, а затем выбрать оператор в одном пакете. Что-то вроде этого:

начать

EXEC var: = my_func (...);

выберите var.a, var.b, var.c ...;

конец;

0 голосов
/ 18 марта 2010

Как говорит Эндрю, вы можете (должны!) Разделить свою функцию на две отдельные (гм) функции, которые она выполняет:

update data
return data

По возможности, следует избегать «скрытой магии» в хранимых процедурах / функциях.
Это улучшает удобочитаемость и удобство обслуживания

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