DB2自定义函数

     查看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
@




你可能感兴趣的:(DB2,function)