二つのoracleはフィールドの自己成長の実現方法を作成します。


mysqlなどの他のデータベースには記録の挿入に伴って表IDが自動的に増加する機能がありますが、oracleにはこのような機能がありません。フィールドの自己成長を解決するために次の2つの方法があります。
両方の方法はシーケンスを作成することによって実現される必要があるので、ここではまずシーケンスの作成方法を提供する。

CREATE SEQUENCE    
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
解析:
1)INCREMENT BYは、シーケンスのステップサイズを定義するために使用され、省略するとデフォルトでは1となり、負の値があるとOracleシーケンスを表す値は、このステップに従って減少します。
2)START WITHシーケンスの初期値(すなわち、生成された最初の値)を定義し、デフォルトは1です。
3)MAXVALEは、シーケンス生成器が生成できる最大値を定義する。オプションNOMAXVALEは、デフォルトのオプションであり、最大値の定義がないことを表しています。Oracleシーケンスを増分するには、システムの最大値は10の27乗です。逓減シーケンスの最大値は-1です。
4)MINVALEは、シーケンス生成器が生成できる最小値を定義する。オプションNO MAXVALEはデフォルトのオプションです。最小値の定義がないことを表します。10の26乗インクリメントシーケンスの場合、最小値は1です。
5)CYCLEとNOCYCLEは、シーケンス生成器の値が制限値に達したときにループするかどうかを表します。CYCLEは循環を表し、NOCYCLEは循環しないことを表す。ループの場合、インクリメントシーケンスが最大値に達すると、最小値にループします。逓減シーケンスが最小値に達する場合は、最大値にループします。ループしないと、制限値に達したら、新しい値が続けばエラーが発生します。
6)CACHE(バッファ)は、格納シーケンスのメモリブロックのサイズを定義し、デフォルトでは20とする。NOCACHEはシーケンスに対してメモリバッファを行わないことを示しています。シーケンスをメモリバッファリングすることで、シーケンスの性能が向上します。
解決方法一、シーケンス+トリガー
具体的な実現方法は以下の通りである。
第一歩、sequenceを作成する

-- Create sequence
create sequence SEQ_T_RECV
minvalue 1
maxvalue 9999999
start with 1
increment by 1
cache 50;
第二ステップ、表を作成します。

-- Create table
create table RECV_MSG
(
 id     NUMBER,
 messageid  VARCHAR2(32),
 contents  VARCHAR2(2000),
 app_flg   VARCHAR2(100),
 phonenumber VARCHAR2(2000),
 updatetime DATE default sysdate
);

第三ステップ、トリガーを確立する。

CREATE OR REPLACE TRIGGER "recv_trig"
 BEFORE INSERT ON recv_msg
 REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
BEGIN
 SELECT SEQ_T_RECV.NEXTVAL INTO :NEW.ID FROM DUAL;
END recv_trig;
第四ステップ、テストと確認
テーブルにデータを挿入して、idフィールドが自動的に増加したかどうかを確認します。
 
解決方法二、シーケンス+呼び出しシーケンスを表示します。
一、sequenceを作成する

create sequence seq_on_test 
increment by 1 
start with 1 
nomaxvalue 
nocycle 
nocache; 
 二、建表

--   
drop table test; 
create table test( 
ID integer 
,stu_name nvarchar2(4) 
,stu_age number 
); 
三、データの挿入(呼び出しシーケンスの次の値を表示して挿入)

--     
insert into test values(seq_on_test.nextval,'Mary',15); 
insert into test values(seq_on_test.nextval,'Tom',16); 
 
四、チェック

select * from test; 

--   
/* 
1 Mary 15 
2 Tom 16 
*/ 
付随:シーケンスの現在値と次の値を表示する表示方法

--seq      
select seq_on_test.currval from dual; 
select seq_on_test.nextval from dual; 

--   
/* 
2 
3 
*/ 
 

締め括りをつける
フリップフロップによって直接追加する方法は、呼び出しより便利です。どのフィールドがどのシーケンスから次の値を取得する必要がありません。フリップフロップによって実行される追加が必要ですか?
以上が本稿のすべてです。二つのoracleフィールドの自己成長の実現方法を把握するのに役立ちます。