我需要在我们的Web应用程序中生成唯一的序列号。
我创建了一个名为SerialNumber的表,它只有一行。在开始时它将具有像'0000000000'十倍零的价值。每当需要生成序列号时,这将增加1。
e.g。 0000000001,0000000002等。
我保持列数据类型为Integer,它将值存储为0,1,2等而不是0000000001.我希望序列号只有十位数,并且在开头附加零。
请帮我写这个存储过程。
答案 0 :(得分: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;
/
答案 1 :(得分:3)
请使用
lpad(serial_no, 10, '0');
的更多信息
http://www.techonthenet.com/oracle/functions/lpad.php
除了存储在表中
之外,最好在oracle中使用序列