天天看點

db2 控制台執行建立函數語句_DB2建立function(二)

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;這樣的是通不過的