oracleデータベースフィールドの自己成長を実現する(2つの方法)


プログラム猿は、Msqlなど他のデータベースに記録の挿入によって表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
*/
以上は2つの方法でoracleデータベースフィールドの自己成長のすべての紹介を紹介しました。皆さんの役に立つことを願っています。