2

我需要在我们的 Web 应用程序中生成一个唯一的序列号。

我创建了一个名为 SerialNumber 的表,它只有一行。一开始,它的值会像 '0000000000' 十倍于零。每次需要生成序列号时,这将加一。

例如 0000000001、0000000002 等等。

我将列数据类型保留为整数,它将值存储为 0、1、2 等,而不是 0000000001。我希望序列号只有十位数字,并在开头附加零。

请帮我为此编写存储过程。

4

2 回答 2

7
select to_char(<column-value>, 'FM0000000000') from serialNumber;

我不知道您的要求背后是什么,但很可能,您最好使用sequence。使用表生成唯一 ID 通常是一个糟糕的选择,应该进行审查。

至于存储过程和序列,构建的基本框架可能是:

序列:

create sequence serial_number_seq;

存储过程(实际上是一个函数)

create or replace function next_serial_number return varchar2 as

       serial_number_ number;
       MAX_SR_NO number;
begin

       select serial_number_seq.nextval into serial_number_ from DUAL;

       Select MAX(sr_no) INTO MAX_SR_NO from serialNumber;

       serial_number_ := GREATEST(serial_number_, MAX_SR_NO); 

       return to_char(serial_number_, 'FM0000000000');

end    next_serial_number;
/

测试

begin
  dbms_output.put_line(next_serial_number);
  dbms_output.put_line(next_serial_number);
  dbms_output.put_line(next_serial_number);
  dbms_output.put_line(next_serial_number);
  dbms_output.put_line(next_serial_number);
  dbms_output.put_line(next_serial_number);
-- in the place where you use the serial number the greatest 
--  of inserted value from external system or sequence value will be used
 final_value:= next_serial_number;
end;
/
于 2012-04-30T04:19:37.187 回答
3

请用

lpad(serial_no, 10, '0');

更多信息在

http://www.techonthenet.com/oracle/functions/lpad.php

并且在oracle中使用序列而不是存储在表中也更好

http://www.techonthenet.com/oracle/sequences.php

于 2012-04-30T04:18:00.450 回答