posts - 60,comments - 71,trackbacks - 0

              mysql等其他數(shù)據(jù)庫中有隨著記錄的插入而表ID自動增長的功能,而oracle卻沒有這樣的功能,但我們可以用序列和觸發(fā)器來實現(xiàn)這樣的功能.

          一)建立序列:
          create sequence SMSLOG_SEQ
          minvalue 
          1
          maxvalue 
          999999999999999999
          start 
          with 601
          increment 
          by 1
          cache 
          20;
          二)建立觸發(fā)器:
          CREATE OR REPLACE TRIGGER "smslog_trig"
            BEFORE 
          INSERT ON smslog
            REFERENCING OLD 
          AS OLD NEW AS NEW FOR EACH ROW 
          DECLARE
          BEGIN
            
          SELECT smslog_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
          END smslog_trig;
          三)建立表:
          create table SMSLOG
          (
            ID       
          NUMBER not null,
            USERID   
          NUMBER,
            USERNAME 
          VARCHAR2(200),
            DEPTID   
          NUMBER
          )

          這樣在執(zhí)行: insert into smslog(userid,username,deptid) values('001','aaa','1001');時將會自動給ID自動賦值1,每插入一條記錄,ID的值會增加1.

          注:以上序列,觸發(fā)器等在PL/SQL工具中建立很容易,但如果是在命令行中創(chuàng)建,則語句最后要是"/",即執(zhí)行的意思,而不是";",
          如創(chuàng)建觸發(fā)器,命令為:
          CREATE OR REPLACE TRIGGER "smslog_trig"
            BEFORE 
          INSERT ON smslog
            REFERENCING OLD 
          AS OLD NEW AS NEW FOR EACH ROW 
          DECLARE
          BEGIN
            
          SELECT smslog_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
          END smslog_trig;
          /
          posted on 2008-05-31 16:19 henry1451 閱讀(1298) 評論(0)  編輯  收藏 所屬分類: Oracle技術
          主站蜘蛛池模板: 长治市| 黑水县| 府谷县| 深圳市| 施秉县| 通化市| 运城市| 桃源县| 拉孜县| 兴义市| 叶城县| 满城县| 塘沽区| 军事| 襄汾县| 巴彦淖尔市| 宁夏| 乌审旗| 双城市| 交口县| 新河县| 固原市| 钟祥市| 九江县| 中宁县| 乐安县| 应城市| 阿合奇县| 巴东县| 吉木萨尔县| 涪陵区| 克拉玛依市| 漯河市| 奇台县| 宝应县| 米易县| 甘洛县| 榕江县| 洛浦县| 泸水县| 大理市|