DB2建立function(一),介紹将function内容作為字段值,或做為一個where條件的情況。
DB2建立function(二),介紹傳回的内容為一個集合的情況。調用結果集的示例如下:
select * from table(GET_EFFECTIVE_USER_ID(21))--GET_EFFECTIVE_USER_ID為建立的function函數。
建立的function示例如下:
CREATE FUNCTION "FAS"."GET_EFFECTIVE_USER_ID" ( "A_USER_ID" BIGINT )
RETURNS TABLE ( "ID"BIGINT )--注意傳回的為table(col1,col2,col3) 括号裡傳回的表列,要一一對應
SPECIFIC "SQL131104183947721"--唯一值
LANGUAGE SQL
DETERMINISTIC
NO EXTERNAL ACTION
READS SQL DATA
CALLED ON NULL INPUT
INHERIT ISOLATION LEVEL WITHOUT LOCK REQUEST
INHERIT SPECIAL REGISTERS
RETURN--直接傳回,傳回的為之後查詢的結果集
SELECT CASE
WHEN (CURR_ROLE_ID = 2 OR CURR_ROLE_ID = 7) AND USER_ID <> A_USER_ID
THEN 0
ELSE USER_ID
END ID
FROM (SELECT A.ID USER_ID, B.ROLE_ID, C.ROLE_ID CURR_ROLE_ID
FROM FA_USER_INFO A,
FA_USER_ROLE B,
(SELECT ROLE_ID
FROM FA_USER_ROLE
WHERE USER_ID = A_USER_ID) C
WHERE A.DEPARTMENT_ID IN (
SELECT DEPARTMENT_ID
FROM FA_DEPARTMENT A, FA_DEPARTMENT_INFO B
WHERE A.ID = B.DEPARTMENT_ID
AND B.PARENT_DEPARTMENT_ID = (SELECT DEPARTMENT_ID
FROM FA_USER_INFO
WHERE ID = A_USER_ID)
UNION
SELECT DEPARTMENT_ID
FROM FA_USER_INFO
WHERE ID = A_USER_ID)
AND A.ID = B.USER_ID)
END;--結束标記
特别說明:Function傳回為結果集(table)的情況時,需要注意return後面隻能有一個查詢語句。不能有類似if等邏輯判斷語句
例如 create funtion get_name(var) ... return if ... then sql...else sql...end if; end;這樣的是通不過的