我有一个Oracle函数返回包中定义的记录,所以可以这样做:
select a,b,c FROM my_function(...);
从.NET调用这个oracle函数就像执行普通的sql查询一样简单。
不幸的是,该函数现在必须进行更新,当它被调用时,Oracle会抱怨选择中不允许更新,这是有道理的。 所以现在我可以选择更改函数调用或拆分函数。 基本上我必须摆脱函数调用中的select并在C#中需要这样的东西:
EXEC :var:= my_func(...);
其中var的类型是包中定义的自定义元组。 我已经尝试过使用ParameterDirection.ReturnValue但没有成功。有没有人有想法?
答案 0 :(得分:1)
您可以先执行您的功能,然后在一个批次中选择语句。像这样的Smth:
开始
EXEC var:= my_func(...);
选择var.a,var.b,var.c ...;
端;
答案 1 :(得分:0)
正如Andrew所说,你可以(应该!)将你的功能分成它执行的两个不同的(ahem)函数:
update data
return data
应尽可能避免存储过程/函数中的“隐藏魔法”。