使用C#中的“复杂”返回值调用Oracle函数

时间:2010-03-18 09:39:46

标签: c# .net oracle stored-procedures

我有一个Oracle函数返回包中定义的记录,所以可以这样做:

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

从.NET调用这个oracle函数就像执行普通的sql查询一样简单。

不幸的是,该函数现在必须进行更新,当它被调用时,Oracle会抱怨选择中不允许更新,这是有道理的。 所以现在我可以选择更改函数调用或拆分函数。 基本上我必须摆脱函数调用中的select并在C#中需要这样的东西:

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

其中var的类型是包中定义的自定义元组。 我已经尝试过使用ParameterDirection.ReturnValue但没有成功。有没有人有想法?

2 个答案:

答案 0 :(得分:1)

您可以先执行您的功能,然后在一个批次中选择语句。像这样的Smth:

开始

EXEC var:= my_func(...);

选择var.a,var.b,var.c ...;

端;

答案 1 :(得分:0)

正如Andrew所说,你可以(应该!)将你的功能分成它执行的两个不同的(ahem)函数:

update data
return data
应尽可能避免存储过程/函数中的“隐藏魔法”。
这提高了可读性和可维护性