2011-09-01 32 views
14

我試圖查看pl/sql程序和函數之間的區別,並找到鏈接http://it.toolbox.com/blogs/oracle-guide/learn-plsql-procedures-and-functions-13030。首先讓我告訴你一個開發人員通常用pl/sql程序和函數做什麼PL/Sql過程與函數?

1)希望得到一些返回值。他可以通過函數和過程來使用它。在函數中,如果他想返回一個值,他可以使用return語句。如果他想要返回多個值,他可以通過inout參數實現它。類似地,他可以通過inout參數獲得返回值(不包括返回語句)

但是,只要他是開發者,它就沒有什麼區別能夠通過return語句或inout參數實現其意圖。

所以這裏也可以互相替換。

2)他可以在函數和過程中使用DML。所以在這裏他也可以使用其中的任何一種來改變數據庫的狀態。

所以我沒有得到任何具體的推理哪一個使用的地方,因爲兩者都可以在一些替代。

唯一合理的理由,我發現了在一定程度上是函數可以從SQL調用,程序不能

有人能解釋其中之一來使用時,爲什麼?

+0

另請參閱Oracle.com上的[函數vs存儲過程](https://forums.oracle.com/forums/thread.jspa?messageID=547397) – Vache

+0

@Mohit - 我以前曾問過一個類似的問題。可能的Dup http://stackoverflow.com/questions/1179758/function-vs-stored-procedure-in-sql-server –

+0

@Vache我發現這個說法 存儲過程之間還有一個區別存儲過程編譯一次,可以一次又一次地調用,而不需要每次編譯,這樣可以提高性能並節省時間,另一方面,函數每次在https://forums.oracle.com/forums/thread.jspa?messageID處調用時都會進行編譯= 547397不確定它是否真的如此? –

回答

8

您已經找到主要區別。如果你想在SQL中使用它,你可以創建一個函數。當您只想在PL/SQL中使用它時,您可以創建一個過程。

+0

所以我可以假設我應該總是使用過程,除非我想在sql查詢中使用它們 –

+7

我認爲這是一個很好的經驗法則。我會用略有不同的方式說明:如果您需要將零個或多個輸入值轉換爲一個輸出值,請使用函數。如果您想操作數據庫中的數據,請使用存儲的proc。 –

+0

如果我只想使用PL/SQL,我也會使用函數。這樣,如果我需要在未來的任何時候重用SQL中的邏輯,那麼這是完全微不足道的。 使用過程只有一個優點:它允許您返回多個參數。 – borjab

3

我做了什麼。如果沒有副作用,使用功能,否則程序。此外,只有函數可能是「純」(適用於函數索引)和「流水線」。

1

主要有兩個不同:

1:Use Procedure to take some action. But use function to return some value. 
2:You can call function from sql query but Procedure can't. 
3:Best practice to use Procedure then function if possible. 

感謝。

1

的過程和功能具有相同的結構,不同之處在於:

甲函數頭必須包括指定的返回值的數據類型的RETURN子句。過程標題不能有RETURN子句。

函數在其可執行部分中必須至少包含一個RETURN語句。在一個過程中,RETURN語句是可選的。有關詳細信息,請參閱RETURN語句。

有關詳細信息,請參閱: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#CHDDCFHD

+0

是的,我認爲這是最好的答案。當你不想使用OUT和IN OUT模式參數時,你也應該考慮使用函數。如果有任何理由使用這些參數您應該認真考慮使用存儲過程。 – Rattlesnake