二つのoracleはフィールドの自己成長の実現方法を作成します。
3055 ワード
mysqlなどの他のデータベースには記録の挿入に伴って表IDが自動的に増加する機能がありますが、oracleにはこのような機能がありません。フィールドの自己成長を解決するために次の2つの方法があります。
両方の方法はシーケンスを作成することによって実現される必要があるので、ここではまずシーケンスの作成方法を提供する。
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を作成する
テーブルにデータを挿入して、idフィールドが自動的に増加したかどうかを確認します。
解決方法二、シーケンス+呼び出しシーケンスを表示します。
一、sequenceを作成する
フリップフロップによって直接追加する方法は、呼び出しより便利です。どのフィールドがどのシーケンスから次の値を取得する必要がありません。フリップフロップによって実行される追加が必要ですか?
以上が本稿のすべてです。二つのoracleフィールドの自己成長の実現方法を把握するのに役立ちます。
両方の方法はシーケンスを作成することによって実現される必要があるので、ここではまずシーケンスの作成方法を提供する。
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フィールドの自己成長の実現方法を把握するのに役立ちます。