2010-03-18 84 views
0

「複雜」的返回值,我在包中定義一個Oracle函數返回的記錄,所以可以做到:調用Oracle函數與C#

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

調用從.NET此Oracle功能是作爲執行一樣簡單正常的sql查詢。

不幸的是,函數現在必須做更新,當它被這樣調用時,Oracle抱怨在選擇內不允許更新,這是有道理的。 所以,現在我可以選擇更改函數調用或分割函數。 基本上我有在函數調用擺脫選擇的,需要在C#這樣的事情:

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

其中var的類型是在包中定義的自定義的元組。 我已經嘗試使用ParameterDirection.ReturnValue沒有成功。有人有想法嗎?

+0

請注意。嘗試從這篇文章的場景[http://stackoverflow.com/questions/4098944/oracle-stored-procedure-and-custom-data-type](http://stackoverflow.com/questions/4098944/oracle-stored-procedure和自定義數據類型) – 2016-12-02 20:47:24

回答

1

您可以先執行您的功能,然後在一批中選擇語句。水木清華這樣的:

開始

EXEC VAR:= my_func,並將(...);

select var.a,var.b,var.c ...;

end;

0

安德魯說,你可以(應該!)劃分出功能分爲兩個不同的(啊哈)功能將執行:在存儲過程中

update data 
return data 

「隱魔」 /功能應儘量避免以往任何時候都可能。
這提高了可讀性和可維護性

+0

問題是,更新是依賴於選擇,因此要將它們乾淨地分開,我需要在非常高流量情況下進行多個數據庫調用。 – devdimi 2010-03-18 10:22:29