dolphin_bobo 发表于 2013-1-13 18:19:33

在DB2数据库自定义产生指定位数的随机数函数

DB2产生随机数的函数:RAND()
例:SELECT INT(RAND()*100) FROM  SYSIBM.SYSDUMMY1; --产生0-100之间的随机数。
注:RAND()返回的为0-1之间的任意浮点数,所以需要使用INT将浮点数转换为整数,去掉小数位。
如果生成固定位数的随机数,需要自己写函数实现。
在 ORACLE中,提供了补位的方法供调用(lpad()),但在DB2中没有相应的函数。
 
SET SCHEMA DB2INST1;SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","DB2INST1";CREATE FUNCTION DB2INST1.F_RANDOM ("IN_LENGTH" INTEGER )   RETURNS INTEGERSPECIFIC DB2INST1.F_RANDOMLANGUAGE SQLNOT DETERMINISTICREADS SQL DATASTATIC DISPATCHCALLED ON NULL INPUTEXTERNAL ACTIONINHERIT SPECIAL REGISTERSBEGIN atomic    declare v_newLength INTEGER;    declare v_random INTEGER;    declare v_length INTEGER;    declare v_index INTEGER;    declare out_result VARCHAR(30);    IF in_length > 30 THEN      RETURN 0;    END IF;      SET v_random = INTEGER(RAND()*POWER(10,in_length));    SET v_length = in_length - LENGTH(RTRIM(CHAR(v_random)));    SET v_index = 1;    SET out_result = CHAR(v_random);    WHILE v_index <= v_length DO      SET out_result = CONCAT('8',out_result);--位数不够,前面补8      SET v_index = v_index + 1;    END WHILE;    SET v_random = INTEGER(out_result);    RETURN v_random;END; 
 SELECT F_RANDOM(8) FROM  SYSIBM.SYSDUMMY1;--产生8位的随机数。
页: [1]
查看完整版本: 在DB2数据库自定义产生指定位数的随机数函数