0

私は学生です

私は割り当てを行いますauto increment

auto increment Oracle でを作成する方法は?

CREATE TABLE mua_thi
( 
 mamuathi varchar2(10) not null,
 check(mamuathi like 'MT%')
)
 mamuathi = MT + auto_increment;


create or replace trigger tangmuathi
before insert or update
on mua_thi

begin 
set new.mamuathi := MT + muathitang.nextval from Dual;
end;

create sequence muathitang start 
with 1 increment by 1;
4

1 に答える 1

2
mamuathi = MT + auto_increment;

そのようにテーブルを構成しないでください。これがスマート キー (複数のコンポーネントが連結された単一の文字列) です。スマートキーはばかげています。"MT" が重要な場合 (ハードコードされた変更されない要素を持つキーが必要なのはなぜですか?)、それを別の列にします。

CREATE TABLE mua_thi ( mamuathi varchar2(2) not null
                       , id number (8) not null 
                       , primary key (mamuathi, id )
                       , check(mamuathi = 'MT')
  );

実際にはまだいくつかの悪い習慣があります。1 つ目は、制約に名前を付ける - 作業が楽になります。

, constraint mt_pk primary key (mamuathi, id )
, constraint mt_ck check(mamuathi = 'MT')

2 つ目は、mamuathiが本当に定数である場合、キーで使用しても意味がありません。

, constraint mt_pk primary key ( id )

3 つ目は、 mamuathi複数の値に発展する可能性があるため、ルックアップ テーブルへの外部キーの方が適切かどうかを検討してください。

明らかに、スマート キーを分割することの欠点は、複数の列を参照する必要があることです。11g では、仮想列機能を使用してその不便さを回避できます。

CREATE TABLE mua_thi ( mamuathi varchar2(2) not null
                       , id number (8) not null 
                       , mamuathi_disp AS mamuathi||lpad(id,8,'0')
                       , primary key (mamuathi, id )
                       , check(mamuathi = 'MT')
  );
于 2013-05-07T10:06:08.133 に答える