oracle生成随机数函数

CREATE OR REPLACE 
FUNCTION createUniqueKey(str_begin in VARCHAR2,str_date in VARCHAR2,date_date in date
,str_date_format in VARCHAR2,bool_is_timestamp in char,int_random_length in int)
RETURN  VARCHAR2
AS
--str_begin 开始字符
--str_date 字符串类型日期,使用时忽略日期类型date_date及其格式化str_date_format参数
--date_date 日期类型日期
--str_date_format 日期类型日期格式化format
--bool_is_timestamp 是否使用时间戳
--int_random_length 随机数长度,请不要超过35位

--生成规则:开始字符+格式化日期(或者时间戳)+随机数
--createUniqueKey('L','',sysdate,'','0',5)  使用默认日期格式结果:L2017090501131231524
--createUniqueKey('L','',null,'yymmdd-','0',5)  使用当前时间自定义日期格式结果:L170905-73080
--createUniqueKey('L','',sysdate,'yymmdd-','1',5)  使用时间戳结果:L150454530538674643
--createUniqueKey('L','2017/9/8',sysdate,'yymmdd-','0',5)  使用字符串日期结果:L2017/9/890691

return_str varchar2(4000);
str_my_date_format varchar2(40);
date_my_str varchar2(40);
date_my_date DATE;
str_random varchar2(4000);
BEGIN
    return_str := str_begin;
    
    if str_date = '' or str_date is null then--字符串类型的日期不存在时,使用日期类型的日期
        if date_date is null then
            date_my_date := sysdate;
        else
            date_my_date := date_date;
        end if;
        if bool_is_timestamp = '0' then
            --不使用时间戳,根据format格式得到字符串类型日期
            if str_date_format = '' or str_date_format is null then
                str_my_date_format := 'yyyymmddhh24miss';
            else 
                str_my_date_format := str_date_format;
            end if;
            date_my_str := to_char(date_my_date,str_my_date_format);
        end if;
    
    else--字符串类型的日期格式存在时,直接利用此字符串日期
        if bool_is_timestamp = '0' then
            date_my_str := str_date;
        else
            --使用时间戳,需要将字符串类型转换程日期类型来计算时间戳
            date_my_date := to_date(str_date,'yyyy-mm-dd hh24:mi:ss');
        end if;
    end if;
    --使用时间戳,计算得出
    if bool_is_timestamp = '1' then
        date_my_str := to_char((date_my_date - TO_DATE('1970-1-1 8', 'YYYY-MM-DD HH24')) * 86400000 
            + TO_NUMBER(TO_CHAR(SYSTIMESTAMP, 'FF3')));
    end if;
    return_str := return_str || date_my_str;
    
    --生成随机数
    if int_random_length > 0 then
        str_random := substr(to_char(dbms_random.value),2,int_random_length);
        return_str := return_str || str_random;
    end if;
    return(return_str);
END;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值