SYSIBM.SYSDUMMY1,效果如下:SELECT 1+1 FROM SYSIBM.SYSDUMMY1;
SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1;--查询当前日期

VALUES 命令获取结果,如下:VALUES (3+2);
values length('abc');
values CURRENT DATE;


SYSIBM.SYSDUMMY1 创建别名dual,如下:CREATE ALIAS dual FOR SYSIBM.SYSDUMMY1; --创建别名
SELECT 5+7 FROM dual;

nvl()
nvl(),语法如下:nvl(val1,val2)
null,不算空字符串),则返回val2,否则返回val1本身,例子如下:SELECT nvl(null,0),nvl(234,0),nvl('','aa') FROM SYSIBM.SYSDUMMY1;

value()、COALESCE() 用法同nvl()nvl2()SELECT nvl2(null,0,1),nvl2(234,0,1),nvl2('','不空','空') FROM SYSIBM.SYSDUMMY1;

value()、COALESCE()value()、COALESCE() 就简单,因为用法同nvl(),给两个语句,自己下去测测看:SELECT value(null,0),value(56,0),value('','bb') FROM SYSIBM.SYSDUMMY1;
SELECT COALESCE(null,0),COALESCE(56,0),COALESCE('','bb') FROM SYSIBM.SYSDUMMY1;

nvl() 和 nvl2() 吧,除了熟悉之外还有就是以后换数据库的话也好移植。
create or replace function fun_sum_number(num1 bigint,num2 bigint)
returns bigint
BEGIN
declare v_result bigint;
SET v_result = num1 + num2;
return v_result;
END
values(fun_sum_number(1,5));

最小数、最大数以及步长确定的等差数列的n项和,实现代码如下:CREATE OR REPLACE FUNCTION fun_all_num_sum(start_num bigint, end_num bigint, step_num bigint)
RETURNS bigint
LANGUAGE SQL
BEGIN
DECLARE loop_start bigint;
DECLARE total_sum bigint;
SET loop_start = start_num;
SET total_sum = 0;
WHILE loop_start <= end_num DO
SET total_sum = total_sum + loop_start;
--step_num 步长
SET loop_start = loop_start + step_num;
END WHILE;
RETURN total_sum;
END
SELECT fun_all_num_sum(1,3,1),fun_all_num_sum(1,4,1),fun_all_num_sum(2,8,2) FROM SYSIBM.SYSDUMMY1 ;

CREATE OR REPLACE FUNCTION fun_query_dog_by_id(dogId varchar(10))
RETURNS TABLE(
DOG_ID varchar(10),
dog_name varchar(10),
dog_kind varchar(10)
)
RETURN
SELECT DOG_ID, dog_name, dog_kind
FROM dog
WHERE dog.DOG_ID = fun_query_dog_by_id.dogId;
--或者直接 WHERE dog.DOG_ID = dogId;
--WHERE dog.DOG_ID = dogId;

SELECT * FROM table(fun_query_dog_by_id('A10001'));


CREATE OR REPLACE FUNCTION fun_get_company_id_by_dept_id(v_dept_id varchar(10))
RETURNS varchar(10)
LANGUAGE SQL
BEGIN
DECLARE dept_level bigint;
DECLARE loop_dept_id varchar(10);
DECLARE result_company_id varchar(10);
select t.DEPT_LEVEL into dept_level from sys_company_dept t where t.dept_id = v_dept_id;
--如果本身就是公司,直接返回,如果是部门循环找上级直到找到公司ID
SET loop_dept_id = v_dept_id;
WHILE dept_level >= 2 DO
SELECT t1.PARENT_ID ,t2.DEPT_LEVEL into loop_dept_id,dept_level FROM sys_company_dept t1
LEFT JOIN sys_company_dept t2 ON t1.PARENT_ID = t2.DEPT_ID
where t1.dept_id = loop_dept_id;
END WHILE;
SET result_company_id = loop_dept_id;
RETURN result_company_id;
END

SELECT temp.*,t2.DEPT_NAME AS company_name FROM (
SELECT t1.*,fun_get_company_id_by_dept_id(t1.DEPT_ID) AS company_id FROM sys_company_dept t1
)temp LEFT JOIN sys_company_dept t2 ON temp.company_id = t2.DEPT_ID

call sysproc.admin_cmd('reorg table 表名')