我需要在我们的 Web 应用程序中生成一个唯一的序列号。
我创建了一个名为 SerialNumber 的表,它只有一行。一开始,它的值会像 '0000000000' 十倍于零。每次需要生成序列号时,这将加一。
例如 0000000001、0000000002 等等。
我将列数据类型保留为整数,它将值存储为 0、1、2 等,而不是 0000000001。我希望序列号只有十位数字,并在开头附加零。
请帮我为此编写存储过程。
我需要在我们的 Web 应用程序中生成一个唯一的序列号。
我创建了一个名为 SerialNumber 的表,它只有一行。一开始,它的值会像 '0000000000' 十倍于零。每次需要生成序列号时,这将加一。
例如 0000000001、0000000002 等等。
我将列数据类型保留为整数,它将值存储为 0、1、2 等,而不是 0000000001。我希望序列号只有十位数字,并在开头附加零。
请帮我为此编写存储过程。
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;
/
请用
lpad(serial_no, 10, '0');
更多信息在
http://www.techonthenet.com/oracle/functions/lpad.php
并且在oracle中使用序列而不是存储在表中也更好