[oracle] 挿入時に列にMAX+1の値を設定する(シーケンスは使わない)

Pocket

Oracle でシーケンスが使えるのは Oracle 12c からのようなので、人によっては待ちに待った機能追加なのではないでしょうか?

そして、ちょうど 12c を使っての開発があり、シーケンスの使用で全く問題なさそうな場面に遭遇しましたが、 その列には「MAX+1」を設定すると譲らない人がいました。

何やらごちゃごちゃ言っていましたが、使ったことがないだけのようです。まあ、いいんですよ、別に。 しかし、あまりにも必死だったので憐れみの視線を送っておきました。

ついでですので、ある列に、「MAX+1」を追加さするSQLのサンプルを掲載しておきます。

スポンサーリンク

挿入時に列に「MAX + 1」の値を設定する

テーブルは次のものを使用しています。

create table sample_table1 (
    seq_no       number(3, 0),
    category     varchar2(16),
    sample_name  varchar2(32)
)

では早速、sql_no 列に現在の seq_noの最大値+1を挿入するSQLのサンプルです。
(個人的に)シーケンスが使いたくなってしまいますので、ここでは、列(category)ごとにMAX+1を採番するように
なお、最大値が取得できない場合(最初の1レコード目など)は、1 を設定するようにしています。

insert into (
    seq_no,
    sample_name
) values (
    (
        select
            coalesce(MAX(seq_no), 0) + 1
        from
            sample_table1
        where
            category = 'ばなな'
    ),
    '名前です'
)

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *