Oracle自增ID的实现过程
来源:优易学  2010-1-19 17:13:17   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  -------------------------------------------------------------------------

  ###建表###

  CREATE TABLE "SPORTS"."LINEUP"("ID" NUMBER NOT NULL,

  "TYPE" NUMBER(3) NOT NULL,

  "BODY" VARCHAR2(100) NOT NULL,

  "HITS" NUMBER(10) DEFAULT 0 NOT NULL,

  PRIMARYKEY("ID"))

  TABLESPACE "TS_SPORTS"

  ###建序列###

  CREATE SEQUENCE "SPORTS"."SPORTS_LINEUP_ID_SEQ" INCREMENT BY 1

  START WITH 1 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE

  CACHE 50 NOORDER

  ###建自动更新的触发器###

  CREATE OR REPLACE TRIGGER "SPORTS"."SPORTS_LINEUP_ID_TRIGGER"

  BEFORE INSERT ON "SPORTS"."LINEUP" FOR EACH ROW

  DECLARE

  next_id NUMBER;

  BEGIN

  --Get the next id number from the sequence

  SELECT sports_lineup_id_seq.NEXTVAL INTO next_id FROM dual;

  --Use the sequence number as the primarykey

  --for there cord being inserted.

  :new.id:=next_id;

  END;

  ###建保护PRIMARYKEY的触发器###

  CREATE OR REPLACE TRIGGER "SPORTS"."LINEUP_ID_UPDATE_TRIGGER"

  BEFORE UPDATE OF "ID" ON "SPORTS"."LINEUP" FOR EACHROW

  BEGIN

  RAISE_APPLICATION_ERROR(-20000,

  'sports_lineup_id_update_trigger:Update sof the ID field'

  ||'arenotallowed.');

  END;

  ###建删除的触发器###

  create   or replace trigger tr_bis_exc_req_del

  before delete

  on bis_exc_req

  referencing old as old new as new

  for each row

  begin

  if :old.check_status = '3' then

  raise_application_error (-20001,'*****!');

  return;

  end if;

  end;

  /

  ###建更新的触发器###

  create   or replace trigger tr_bis_exc_req_upd

  before update

  on bis_exc_req

  referencing old as old new as new

  for each row

  begin

  if :old.check_status = '3' then

  raise_application_error (-20001,'*******!');

  return;

  end if;

  end;

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训