ORACLEデータベースの自己増加を実現する2つの方法
2111 ワード
Mysqlデータベースは自動+1があるので、一般的にはキーワードauto_を直接使うのにあまり時間がかかりません.incrementでいいですが、Oracleではできません.自動成長メカニズムはありません.私たちは自分で実現する必要があります.一般的には2つの方法がありますが、この2つの方法はシーケンス化に関係しています.1つ目の方法:シーケンス化+トリガ;第2の方法:シーケンス化+呼び出しシーケンス化を表示します.一般的に私は最初の方法を選びます.シーケンス化+トリガを確立すれば、このフィールドに注目する必要があります.トリガはデータを挿入するときに自動的にトリガされ、+1操作を支援します.これはちょうど私が最近やったminiプロジェクトの部門削除操作(サブ部門と親部門)を解決しました.私たちは親部門がいつもサブ部門より先にデータベースに存在することを知っています.もし私たちが挿入データの前後順序を記録するためにフィールドを追加すれば、私たちは削除をするときに、サブ部門を親部門より先に削除すれば、一括削除部門は存在しません.親部門を削除して子部門を再帰的に削除し、子部門を削除したときに子部門が存在しないことに気づいて異常を報告します.はい、ケースは終わりました.次に、oracleデータベースで自己増加1の操作を具体的に実現します.
ワークシートの準備:
方法一:シーケンス化+トリガ
ステップ1:シーケンスsequenceの作成
ステップ2:トリガの作成
ステップ3:データテストを挿入してdept_を見るsort自増かどうか
方式2:シーケンス化+呼び出しの表示
ステップ1:シーケンスsequenceの作成
ステップ2:呼び出しシーケンスの表示
ステップ3:クエリーによる表示
注意:
まとめ:
ワークシートの準備:
//
create table dept_p(
dept_id VARCHAR2(40) not null,
dept_name VARCHAR2(40),
parent_id VARCHAR2(40),
state NUMBER(11),
dept_sort NUMBER(11)
);
alter table DEPT_P add [constraint dept_id] primary key(dept_id);
方法一:シーケンス化+トリガ
ステップ1:シーケンスsequenceの作成
create sequence seq_t_dept
minvalue 1
maxvalue 99999999
start with 1
increment by 1
cache 50
ステップ2:トリガの作成
create or replace trigger "dept_trig"
before insert on dept_p
referencing old as old new as new for each row
declare
begin
select seq_t_dept.nextval into :new.dept_sort from dual;
end dept_trig;
ステップ3:データテストを挿入してdept_を見るsort自増かどうか
insert into dept_p values('001', ' ', '000', 1);
select * from dept_p;
方式2:シーケンス化+呼び出しの表示
ステップ1:シーケンスsequenceの作成
// sequence
create sequence seq_on_dept
increment by 1
start with 1
nomaxvalue
nocycle
nocache;
ステップ2:呼び出しシーケンスの表示
insert into dept_p values('001', ' ', '000', 1, seq_on_test.nextval);
ステップ3:クエリーによる表示
select * from dept_p
注意:
//
select seq_on_dept.currval from dual;
select seq_on_dept.nextval from dual;
まとめ:
create sequence
[increment by n]
[start with n]
[{maxvalue/minvalue n | nomaxvalue}]
[{cycle|nocycle}]
[{cache n | nocache}];