<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;



                                                                                                           --    學海無涯
            


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


    網站導航:
     
    主站蜘蛛池模板: 国产精品黄页在线播放免费| 亚洲黄色免费电影| 免费a级毛片无码a∨性按摩| 国产亚洲人成在线播放| 日本高清免费网站| 色噜噜狠狠色综合免费视频| 亚洲免费无码在线| 中国国产高清免费av片| 精品国产亚洲一区二区三区| A片在线免费观看| 亚洲专区先锋影音| 无人在线观看免费高清视频 | 精品丝袜国产自在线拍亚洲| 可以免费看黄视频的网站| jlzzjlzz亚洲jzjzjz| 毛片免费vip会员在线看| 亚洲AV日韩AV无码污污网站| 国产无遮挡裸体免费视频| 成人免费夜片在线观看| 久久亚洲国产午夜精品理论片| 无码国产精品一区二区免费模式 | 亚洲午夜电影一区二区三区| 中文字幕av无码无卡免费| 亚洲av无码一区二区三区在线播放 | 亚洲国产精品无码久久九九| 成全在线观看免费观看大全 | 亚洲国产精品成人一区| 久久er国产精品免费观看2| 亚洲成年人电影网站| 国产免费av片在线无码免费看| 精选影视免费在线 | 亚洲精品国产福利片| 国产国产成年年人免费看片| 久久嫩草影院免费看夜色| 亚洲国产美女福利直播秀一区二区| 啦啦啦在线免费视频| 中文字幕在线免费视频| 91亚洲自偷在线观看国产馆| 日韩亚洲国产二区| 69视频在线是免费观看| 免费一级全黄少妇性色生活片|