2010-03-18 2 views
0

У меня есть функция, возвращающая запись Oracle, определенный в пакете, так что можно сделать:Вызов Oracle функции с «сложной» возвращаемого значения C#

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

Вызов этого оракула функцию из .NET так просто, как выполнение нормальный sql-запрос.

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

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

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

+0

Pls. попробуйте сценарий из этой статьи [http://stackoverflow.com/questions/4098944/oracle-stored-procedure-and-custom-data-type](http://stackoverflow.com/questions/4098944/oracle-stored-procedure -and-custom-data-type) –

ответ

1

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

начинают

EXEC вар: = my_func (...);

Выбрать var.a, var.b, var.c ...;

конец;

0

Как Андрей говорит, вы можете (должны!) Разделить ваши функции в двух различных (гм) функции она выполняет:

update data 
return data 

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

+0

Проблема в том, что обновления зависят от выбора, поэтому для их четкого разделения мне нужно несколько вызовов БД в сценарии с очень высоким трафиком. – devdimi

Смежные вопросы