查看DB2的系统函数
select * from syscat.FUNCTIONS where funcschema='XXXX'AND FUNCNAME='XXX'
DB2自定义函数只能包含那些不会改变数据库状态的语句(诸如INSERT、UPDATE或DELETE语句是不允许的)。并且只允许完整SQL PL语言的子集出现在SQL函数中(不能是CALL语句、游标和条件处理)。
自定义函数语法
CREATE FUNCTION 函数名(传入参数名 datatype,…)
RETURNS datatype –返回值类型
BEGIN (ATOMIC)
函数体
END
注意:使用ATOMIC关键字后,在BEGIN..END之间的命令将被作为一个原子操作处理,若在其中的某一行发生错误,则整个操作全部回滚。
例子
create or replace function add(a bigint,b bigint)
returns bigint
language sql
begin
return a + b;
end
@
调用测试:
VALUES (add(1, 2);
返回table的自定义函数:
CREATE or REPLACE FUNCTION job_employees (job VARCHAR(8))
RETURNS TABLE (
empno CHAR(6),
firstname VARCHAR(12),
lastname VARCHAR(15)
)
LANGUAGE SQL
READS SQL DATA
NO EXTERNAL ACTION
DETERMINISTIC
RETURN
SELECT empno, firstnme, lastname
FROM employee
WHERE employee.job = job_employees.job;
调用测试:
SELECT * FROM TABLE(job_employees('MANAGER')) AS MANAGER
-------------------------------
000020 MICHAEL THOMPSON
000030 SALLY KWAN
000050 JOHN GEYER
000060 IRVING STERN
000070 EVA PULASKI
000090 EILEEN HENDERSON
000100 THEODORE SPENSER
替换id的前四位:
create or replace function id_replace(
id bigint,
swqz varchar(4)----四位前缀
)
returns bigint
begin atomic
declare length int;
declare bz varchar(6);
declare swqzx varchar(4);
set length =length(trim(char(id)));
set swqzx =substr(swqz,1,4);
if id is null then
return id;
end if;
if length >0 and length <4 then
return bigint( swqz||trim(char(id)));
end if;
if length >3 then
set bz=substr(trim(char(id)),1,4);
if bz=swqzx then
return id;
else
return bigint( swqzx|| substr(trim(char(id)),5,(length-4)));
end if;
end if;
end
@