2007年6月16日土曜日

シーケンス(Oracle)を用いたID作成

スズキです。

表記の内容は、別に記事にするまでもないことですが、
今、やっている案件がこんな課題だったので、備忘録として。

●既存のテーブルにデータを追加
●ID列(主キー/文字列/10桁)にIDを入れるわけだが下記制約あり
●[制約]最初の5桁は決まっている'11111'
●[制約]残りの5桁は重複しない数字を適当に入れる(まあ主キーだからね)

方針としては、
連番を発行するシーケンスを作成して、
そのシーケンス番号の左側を5桁になるまで0で埋めて、
決まっている文字'11111'と連結して、挿入、
って感じでしょうか?

で、下記が実装です。

▼シーケンスの作成
--------
CREATE SEQUENCE XXX_ID_SEQ;
--------

▼シーケンスを用いた、IDのインサート
--------
INSERT INTO XXX (
  ID,
  ...
) VALUES (
  '11111' || LPAD(XXX_ID_SEQ.NEXTVAL, 5, '0'),
  ...
)
--------
※"左側を5桁になるまで0で埋めて"はLPAD関数使ってます。

SQL勉強しなおしたくなってきた。(分析関数とか)
http://www.atmarkit.co.jp/fdb/rensai/sqlclinic08/sqlclinic08_1.html

--
blog: http://suz-lab.blogspot.com/

0 コメント: