Db2自定義函數

DB2 Universal Database(DB2 UDB)用戶定義函數(user-defined functions,UDF)允許您添加自己的函數定義,從而擴展 DB2 的內置函數。有了這些用戶定義函數,就可以通過編寫自己的用於事務、計算等方面的函數來定製 DB2,以滿足業務需求。

UDF 鼓勵代碼重用,這樣可以提高應用程序開發人員的生產率。如果您有很多實現相同邏輯的程序,那麼可以通過 UDF 標準化該邏輯,並讓所有這些程序使用相同的實現。一旦在 DB2 中定義好一個 UDF,便可以像使用內置 DB2 函數那樣,在 SQL 語句中使用這個 UDF。如果是在應用程序中編寫這個函數,而不是將其定義爲 UDF,那麼 SQL 查詢工具(例如 CLP)的用戶將不能訪問這個函數。UDF 允許任何前端,包括 Java™ 程序,訪問這個標準邏輯。

直接從數據庫引擎(而不是從應用程序代碼)中調用 UDF 還可以使性能獲得極大的提高,尤其是在將數據發送迴應用程序進行進一步處理之前,可以使用 UDF 來過濾數據。

由於UDF是預先編譯的,性能普遍優於一般的查詢,UDF使用的存取計劃一經編譯就會相對穩定。我在開發中曾多次發現,使用UDF 代替查詢或視圖中的複雜部分會提高几倍甚至幾十倍的性能,主要原因是迫使DB2使用指定的存取計劃來充分利用index或者調整其訪問過程(如Join 順序、Filter位置等)。使用UDF 進行優化的基本思路是:將複雜查詢分解爲多個部分執行,針對每個部分優化處理,將各部分組合時能夠避免存取計劃的一些不必要變化,優化整體性能。

當然了,有一個小問題。自定義函數(UDB)只能包含那些不會改變數據庫狀態的語句(諸如INSERT、UPDATE或DELETE語句是不允許的)。並且只允許完整SQL PL語言的子集出現在SQL函數中(不能是CALL語句、遊標和條件處理)。

自定義函數語法

CREATE FUNCTION 函數名(傳入參數名 datatype, ……)

RETURNS datatype –返回值類型

BEGIN ATOMIC

        函數體

END

例子

create function ADD(a int ,b int) 
returns int
LANGUAGE SQL
BEGIN ATOMIC
     DECLARE sum int default 0;
     set sum = a + b;
     return sum;   
END

調用測試:VALUES (ADD(1, 2))

發佈了27 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章