函數的結構:
function [schema.]function_name
[(parameter [, ...])] --參數列表
return return_datatype --返回數據類型
[authid {definer | current_user}] --指定使用定義者權限還是調用者權限
[deterministic] --系統爲函數的返回值保留一個複製,優化器決定使用保留的複製還是重新執行。
[parallel_enable n] --在select調用函數時可以並行處理
[prpellned] --函數的結果應該通過pile row命令多次返回
[result_cache ...] --指定函數的輸入值和返回值都要保存在函數結果緩存中
is
[declaration statements] --聲明部分,可選。
begin
executable statements --可執行部分,至少有一個return
[exception
exception handlers] --異常處理句柄,可選
end [function_name];
函數頭:is以上部分。通常包括函數名,參數列表,返回數據類型,有關函數定義和行行爲的修飾符。
函數體:is以下部分。通常包括聲明部分(可選)、可執行部分、異常處理部分(可選)。在可執行部分至少包含一個return語句。
return語句:在函數的可執行部分必須包含一個return語句,當然也可以由多個,但函數只執行一個return語句。當第一個return語句執行之後,函數立即終止執行,並把控制權 交還給調用的pl/sql塊。return語句決定了函數的返回值。
函數頭部的return指定了返回的數據類型,而可執行部分的return語句纔是返回的真正值。
函數體中return語句的返回值的數據類型必須和函數頭中指定的返回數據類型相兼容。
關於多個return語句:函數體中可以有多個return語句,但只有一個會被執行。如果不確定返回哪個值,可以使用變量,在函數的最後返回該變量
end標籤:可以直接寫 end;,但最好在end後寫上函數的名字,這是好的習慣。
返回的數據類型:可以返回任何數據類型,但不能返回異常
函數的調用:過程可以作爲一個獨立的可執行語句被執行,但函數不可以,函數只能作爲pl/sql語句的一部分被調用。
不帶參數的函數:對於不帶參數的函數,在調用時可以加括號(),也可以不加括號。