编写oracle存储过程以生成唯一的序列号?

编写oracle存储过程以生成唯一的序列号?,oracle,stored-procedures,generator,serial-number,Oracle,Stored Procedures,Generator,Serial Number,我需要在我们的web应用程序中生成一个唯一的序列号 我创建了一个名为SerialNumber的表,它只有一行。在开始时,它将具有类似于“0000000000”的十倍于零的值。每次需要生成序列号时,该值将递增1 e、 0000000001,0000000002等等 我将列数据类型保留为整数,它将值存储为0、1、2等,而不是000000000 1。我希望序列号只有十位数,开头加上零 请帮助我为此编写存储过程 请使用 lpad(serial_no, 10, '0'); 更多信息请访问 在oracl

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

我创建了一个名为SerialNumber的表,它只有一行。在开始时,它将具有类似于“0000000000”的十倍于零的值。每次需要生成序列号时,该值将递增1

e、 0000000001,0000000002等等

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

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

请使用

lpad(serial_no, 10, '0');
更多信息请访问

在oracle中使用序列也比在表中存储更好

存储过程(实际上是一个函数) 测试
+1用于指出使用序列。如果你的应用程序很忙,从表中执行此操作将导致瓶颈。@RenéNyffenegger。我可能在表中插入了一些记录,其中包含从外部源生成的序列号。在这种情况下,我还需要检查函数生成的序列号是否与系统中的任何现有序列号不匹配。这是我无法控制的,因为我们肯定会有sn。来自其他来源。除了签入db,我没有其他选择。如何在函数中检查该值?@Ashish您可以在表中存储哪些外部源,然后将该值与René提供的函数中生成的值进行比较Nyffenegger@psaraj12. 所以我必须getNewSerial(),如果存在则签入db getNewSerial(),如果存在则签入db,如果不存在则签入db返回。但我如何在我的停止程序中实现这一点呢?@psaraj12。对不起,我找不到它?你把它放哪儿了?
select to_char(<column-value>, 'FM0000000000') from serialNumber;
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;
/