DB2中如何取得随机数

 

在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位的随机数。

 

 

你可能感兴趣的:(oracle,function,schema,db2,Integer,Random)