在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 INTEGER

SPECIFIC DB2INST1.F_RANDOM

LANGUAGE SQL

NOT DETERMINISTIC

READS SQL DATA

STATIC DISPATCH

CALLED ON NULL INPUT

EXTERNAL ACTION

INHERIT SPECIAL REGISTERS

BEGIN 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;

調用自定義函數,産生8位的随機數,如下:
例:SELECT F_RANDOM(8) FROM SYSIBM.SYSDUMMY1;--産生8位的随機數。