<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    序列、觸發器實例

    Posted on 2009-02-16 19:32 啥都寫點 閱讀(572) 評論(0)  編輯  收藏 所屬分類: DB

    想在項目中插入一個序列,對序列的概念以及用法有點模糊,通過查閱資料現在已經對在oracle中插入序列有了一定的了解:

    創建一個序列:

    create sequence SEQ_FileInfo_GW

    minvalue 100000000

    maxvalue 299999999

    start with 100000000

    increment by 1;

    當向表中插入數據時,SQL語句寫法如下:

    INSERT   INTO   my_table(id,...)   values(seq.NEXTVAL,...)


    觸發器應用場景:

            1、強化約束

            2、跟蹤變化

            3、級聯運行

            4、存儲過程的調用

    觸發器分類:

            1、DML觸發器

            2、INSTEAD OF觸發器

            3、系統觸發器


    --demo

    --創建一個語句級觸發器,不允許用戶在“星期日”使用emp表。

    CREATE OR REPLACE TRIGGER not_sunday

    BEFORE INSERT OR UPDATE OR DELETE ON emp

    BEGIN

     IF rtrim(to_char(SYSDATE,'day'))='SUNDAY' THEN

        raise_application_error(-20333,'Sorry!Not on Sundays');

     END IF;

    END;

    --demo

    --創建一個行級觸發器,將從emp表中刪除的記錄輸入到ret_emp表中

    --step1

    CREATE TABLE ret_emp AS SELECT * FROM emp;

    --step1

    CREATE OR REPLACE TRIGGER emp_retire

    BEFORE DELETE ON emp

    FOR EACH ROW

    BEGIN

     INSERT INTO ret_emp VALUES (:OLD.empno,:OLD.ename,:OLD.job,:OLD.mgr,:OLD.hiredate,:OLD.sal,:OLD.comm,:OLD.deptno);

    END;

    --demo

    --創建一個行級觸發器,停止用戶刪除'president'的記錄。

    CREATE OR REPLACE TRIGGER not_president

    BEFORE DELETE ON emp

    FOR EACH ROW

    WHEN (old.job='PRESIDENT')

    BEGIN

     raise_application_error(-20444,'CANNOT DELETE PRESIDENTS RECORD');

    END;

    --demo

    --創建instead of觸發器,通過視圖添加數據。

    --step1

    create or replace view v_deptemp

    as

     select dept.deptno,dept.dname,

             emp.empno,emp.ename

     from dept,emp

     where dept.deptno = emp.deptno;

     

    --step2 

    insert into v_deptemp values(90,'dept',9001,'emp');

    --step3 

    create or replace trigger tr_i_deptemp

    instead of insert on v_deptemp

    for each row

    declare

     v_num number;

    begin

     

     select count(*) into v_num

     from dept where deptno = :new.deptno;

     if v_num = 0 then

       insert into dept(deptno,dname)

       values(:new.deptno,:new.dname);

     end if;

       

     select count(*) into v_num

     from emp where empno = :new.empno;

     if v_num = 0 then

       insert into emp(empno,ename)

       values(:new.empno,:new.ename);

     end if;

       

    end; 

    --step4 

    insert into v_deptemp values(90,'dept',9001,'emp');

    --demo

    --創建DDL觸發器

    --step1

    create table tmp

    ( tid number,

     tdesc varchar2(20)

    );

    --step2

    create or replace trigger ddlschema

    after create or drop or alter on schema

    begin

     insert into tmp values(1,'create');

    end;

    --demo

    --創建DDL觸發器

    --step1

    grant administer database trigger to scott;

    --step2

    create or replace trigger loguser

    after logon on schema

    begin

     insert into tmp values(1,'user log');

    end;

    --step3

    create or replace trigger logalluser

    after logon on database

    begin

     insert into scott.tmp values(2,'user all log');

    end;



                                                                                                           --    學海無涯
            


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲综合综合在线| 最近高清中文字幕免费| 亚洲av极品无码专区在线观看 | 亚洲欧洲精品久久| 亚洲一区二区三区国产精品| 男女免费观看在线爽爽爽视频 | 免费国产成人午夜电影| 美女视频黄的全免费视频网站| 女人隐私秘视频黄www免费| 怡红院亚洲红怡院在线观看| 亚洲国产系列一区二区三区| 亚洲精品国产手机| 亚洲丝袜美腿视频| 国产日韩亚洲大尺度高清| 亚洲精品国精品久久99热| 日韩激情无码免费毛片| 最近中文字幕mv免费高清视频7 | 精品亚洲AV无码一区二区| 亚洲精品高清视频| 好湿好大好紧好爽免费视频| 国产偷国产偷亚洲高清人| 亚洲大成色www永久网址| 亚洲一区二区影视| 亚洲综合激情另类小说区| 亚洲AV人无码激艳猛片| 国产AV无码专区亚洲AWWW| 亚洲中文字幕丝袜制服一区| 亚洲第一福利网站在线观看| 亚洲国产成人久久综合野外 | 狠狠躁狠狠爱免费视频无码| 日韩一级片免费观看| 黄页网站在线视频免费| 色网站在线免费观看| 美女被免费网站在线视频免费 | 性做久久久久久久免费看| 免费无码又黄又爽又刺激 | 国产精品亚洲一区二区三区| 亚洲精品伦理熟女国产一区二区| 亚洲国产精品美女久久久久| 国产成人亚洲精品播放器下载| 日韩免费高清一级毛片|