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



                                                                                                           --    學海無涯
            


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲欧洲视频在线观看| 亚洲免费日韩无码系列 | 波多野结衣免费视频观看| 亚洲三级视频在线观看| 青青在线久青草免费观看| 涩涩色中文综合亚洲| 永久免费看mv网站入口| 亚洲国产精品久久久久秋霞小| 免费无码黄网站在线观看| 亚洲AV无码AV男人的天堂不卡| 国产乱子伦片免费观看中字| 免费看一级高潮毛片| 亚洲人成色777777在线观看| 久久青草免费91线频观看站街| 无码久久精品国产亚洲Av影片| 久久久久高潮毛片免费全部播放| 亚洲精品mv在线观看| 91免费资源网站入口| 丰满亚洲大尺度无码无码专线| 免费人成年激情视频在线观看| 国产精品免费久久久久影院| 亚洲AV电影院在线观看| 91精品免费久久久久久久久| 亚洲一区二区无码偷拍| 亚洲人成电影网站国产精品| 久操免费在线观看| 亚洲中文字幕AV每天更新| 亚洲国产一区二区视频网站| 久久免费看少妇高潮V片特黄| 亚洲国产美女视频| 亚洲精品成人网久久久久久| 亚在线观看免费视频入口| 亚洲 暴爽 AV人人爽日日碰| 亚洲区不卡顿区在线观看| 91麻豆最新在线人成免费观看| 国产亚洲精品91| 亚洲综合精品香蕉久久网97| 国产jizzjizz免费看jizz| 99视频精品全部免费观看| 香港一级毛片免费看| 亚洲国产av美女网站|