DB2创建function(二)
时间:2014-05-19 07:29:40
收藏:0
阅读:712
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;这样的是通不过的
评论(0)