DB2创建function(一),介绍将function内容作为字段值,或做为一个where条件的情况。
DB2创建function(二),介绍建立返回的内容为表集合。调用示例如下
1
|
select * from table (GET_EFFECTIVE_USER_ID(21)) --GET_EFFECTIVE_USER_ID为建立的function函数。
|
建立的function示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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;这样的是通不过的