create or replace procedure inst_XXX is
i int; –定义变量
internal_key number(15);
seq_no varchar2(35);
barnch varchar2(8);
begin –开始 
i:=1;—变量赋值
internal_key:=1;
while i<100000 LOOP; —while循环
seq_no:=’A’ || TO_CHAR(i);  —字符拼接用 ||     int 转字符TO_CHAR()
barnch:=TO_CHAR(FLOOR(DBMS_RANDOM.value(0,99999999))); —-FLOOR()向下取整   DBMS_RANDOM()随机函数
inster int XXXXXXX;  —SQL 逻辑
commit;
internal_key:=internal_key+1;–变量运算
i:=i+1;
end LOOP;   –循环结束
end;

begin inst_XXX; end;  —存储过程执行

————————-补充

 

dbms random是一个可以生成随机数值或者字符串的程序包。这个包有initialize()、seed0)、 terminate)、 value()、normal0)
random()、string()等几个函数。

1.dbms_random.value方法

value()是最常用的,value()的用法一般有两种:

第一 种function value return number;
这种用法没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0

 第二种value带有两个参数,第一个指下限,第二个指上限,将会生成下限到上限之间的数字,但不包含上限

 

2.dbms_random.string 方法

第一个参数的含义:
■ ‘u’, ‘U’ – returning string in uppercase alpha characters
■ ‘l’, ‘L’ – returning string in lowercase alpha characters
■ ‘a’, ‘A’ – returning string in mixed case alpha characters
■ ‘x’, ‘X’ – returning string in uppercase alpha-numeric characters
■ ‘p’, ‘P’ – returning string in any printable characters. Otherwise the returning string is in uppercase alpha
characters.
P 表示 printable,即字符串由任意可打印字符构成

而第二个参数表示返回的字符串长度。

 

3.dbms_random.random 方法

random返回的是BINARY_INTEGER类型值,产生一个任意大小的随机数

random生成一个从-power(2,31)到power(2,31)的整数值,注意,区间为左闭右开

 

4.dbms_random.normal方法

NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。

5.dbms_random.seed方法

用于生成一个随机数种子,设置种子的目的是可以重复生成随机数,用于调试。否则每次不同,难以调度。

 

6.随机日期

生成一个2021年内的任意日期:

分析:2021年内的任意日期,即日期范围是(2021-01-01, 2021-12-31)

可以转化为 2021-01-01 + (0, 365),

其中,2021-01-01 就是指定日期, (0, 365) 就是指定范围

首先确定2021年1月1日的日期整数:
select to_char(to_date(‘2021-01-01’, ‘yyyy-MM-dd’), ‘J’) from dual;

系统给的结果是: 2459216

生成指定范围[min_value, max_value]内的随机日期:
select to_date(2459216+ trunc(DBMS_RANDOM.VALUE(0, 365)), ‘J’) from dual;

 生成随机日期+时间 ,生产2015年1月1日到2015年12月31日之间的日期。

 

7.生成GUID

全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。

Oracle8i引入了SYS_GUID这个概念,它同Oracle管理员所使用的传统的序列(sequence)相比具有诸多优势。一个序列生成器只是简单地创建从给定的起点开始的一系列整数值,而且它被用在选择陈述式的时候自动地递增该系列。   
  序列生成器所生成的数字只能保证在单个实例里是唯一的,这就不适合将它用作并行或者远程环境里的主关键字,因为各自环境里的序列可能会生成相同的数字,从而导致冲突的发生。SYS_GUID会保证它创建的标识符在每个数据库里都是唯一的。