使用Java Class,供一个自定义的Oracle Function来调用。
Oracle的特色之一在于它集成了一个优化了的JDK 1.1.8,由此可以使用Java Class来作非数据I/O的计算。Java has a rich toolkit for generating random numbers, in a class named "Random". 使用Java Class可以轻松地产生使用复杂算法产生的Random数和字符。
Oracle的特色之一在于它集成了一个优化了的JDK 1.1.8,由此可以使用Java Class来作非数据I/O的计算。Java has a rich toolkit for generating random numbers, in a class named "Random". 使用Java Class可以轻松地产生使用复杂算法产生的Random数和字符。
存在表里,岂不是还要再访问数据库,那用java class还不如用pl/sql了。
DECLARE
my_random BINARY_INTEGER;
BEGIN
DBMS_RANDOM.INITIALIZE (99999);
for i in 1..10
loop
my_random := DBMS_RANDOM.RANDOM;
dbms_output.put_line(to_char(my_random));
end loop;
DBMS_RANDOM.TERMINATE;
end;
SQL> /
123669418
899295736
1119206239
-832563190
1837351612
-804666980
-665381754
1733308646
787621970
-1865229406PL/SQL procedure successfully completed.
DBMS_RANDOM.INITIALIZE (sysdate);
....
行不?
我想你的意思有两种方案:
(1) 建立一张类似序列号表,由产生序列号的代码用于判断给出唯一的序列号。
(2) 产生序列号的代码不用考虑是否重复的问题,在生产程序中查询是否已经有该号码的存在,如果存在就再去一次,直到为新的位置。我想单用户应该没有问题,如果是多用户并发的话,应该有更多的事情需要考虑。还有如果采用serialized并发的方法,性能会怎么样呢?
每次取到序号后都尝试插入到这个表里面,插入失败,则重新取