2

Web アプリケーションで一意のシリアル番号を生成する必要があります。

行が 1 つしかない SerialNumber というテーブルを作成しました。最初は、「0000000000」の 10 倍のような値になります。これは、シリアル番号を生成する必要があるたびに 1 ずつ増加します。

例: 0000000001、0000000002 など。

列のデータ型を、値を 0000000001 ではなく 0、1、2 などとして格納する Integer として保持しました。シリアル番号は、先頭にゼロを追加して 10 桁にする必要があります。

このためのストアド プロシージャを作成するのを手伝ってください。

4

2 に答える 2

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

あなたの要件の背後にあるものはわかりませんが、おそらく、シーケンスを提供する方が適切です。テーブルを使用して一意の ID を生成することは、通常、検討すべき不適切な選択です。

sequenceを伴うストアド プロシージャに関しては、構築する基本的なフレームは次のようになります。

シーケンス:

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

また、テーブルに格納する以外に、オラクルでシーケンスを使用することもお勧めします

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

于 2012-04-30T04:18:00.450 に答える