前提:要在Oracle中完成主鍵自動增長的功能,只能依靠序列完成,所有的自動增長操作,需要用戶手工完成處理。
序列是一個獨立的主體,可以應(yīng)用到表格的某個字段中(數(shù)字字段)。
1、創(chuàng)建序列的語法
CREATE SEQUENCE sequence_name ? ? ? ? ??
[INCREMENT BY n][STARTWITH n] ? ? ? ? ? ? ?
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}] ;
2、序列字段含義
CREATE SEQUENCE sequence_name? ? ? ? ? 序列名
[INCREMENT BY n][STARTWITH n] ?
startwith 是確定序列從 n 開始增長, increment by 是每次增長 n。
[{MAXVALUE n | NOMAXVALUE}] ? ? 序列最大值
[{MINVALUE n | NOMINVALUE}] ? ? 最小值
[{CYCLE|NOCYCLE}] ? ? ? ? ? 循環(huán)
[{CACHE n|NOCACHE}] ; ? ? 緩存
3、實例
create sequence squency_overdue_role
increment by 1
start with 10050
nomaxvalue;
4、序列用法
? 刪除序列
drop sequence squency_overdue_role;
序列常用字段:
nextVal ? ? 獲取序列下個值
currVal ? ?獲取當(dāng)前序列值
1、創(chuàng)建觸發(fā)器語法
CREATE[OR REPLACE]TRIGGERtrigger_name
{BEFORE|AFTER?}
{INSERT|DELETE|UPDATE[OF?column?[,?column?…]]}
[OR?{INSERT?|?DELETE?|?UPDATE?[OF?column?[,?column?…]]}...]
ON[schema.]table_name|[schema.]view_name
[REFERENCING?{OLD?[AS]old|NEW[AS]new|PARENTasparent}]
[FOR?EACH?ROW?]
[WHEN?condition]
PL/SQL_BLOCK|CALL?procedure_name;
2、觸發(fā)器實例
(把序列應(yīng)用到表 hcs_ca_aging_lines 中,當(dāng)每次向表 hcs_ca_aging_lines 中插入數(shù)據(jù)時,序列自動增長。插入語句無需寫應(yīng)用序列的字段,即 AGING_LINE_ID 字段)?
create or replace trigger tri_aging_lines
before insert on hcs_ca_aging_lines
for each row
begin
select sequence_aging_lines.nextval into :new.AGING_LINE_ID from dual;
end;
3、刪除觸發(fā)器
drop trigger tri_overdue_rule;
向表中插入數(shù)據(jù):
insert into hcs_ca_aging_lines
(AGING_HEADER_ID,LINE_NUMBER,STAGE_NAME,AGING_FROM,AGING_TO)
values
('10209','3','1-30','1','30');