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

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

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

    隨筆-28  評(píng)論-15  文章-81  trackbacks-0

    1. instead of trigger 是基于視圖建立的,不能建在表上,為什么要建在視圖上,一般的視圖如果其數(shù)據(jù)來源一個(gè)表并且包含該表的主鍵,就可以對(duì)視圖進(jìn)行DML操作.另外一種情況是從多個(gè)表查詢出來的.這樣我們就不能對(duì)視圖進(jìn)行操作了,也就是只能查詢.instead of trigger可以解決建在多表上視圖的更新操作.
    2.下面我們就來實(shí)例操作:
    a.先建表,簡(jiǎn)單點(diǎn)就三個(gè)分別是學(xué)生表,課程表,學(xué)生選課表
    CREATE TABLE STUDENT
    (
       CODE  VARCHAR2(5),
       LNAME VARCHAR2(200)
    )
    CREATE TABLE COURSE
    (
        CODE  VARCHAR2(5),
        CNAME VARCHAR2(30)
    )
    CREATE TABLE ST_CR
    (
       STUDENT VARCHAR2(5),
       COURSE  VARCHAR2(5),
       GRADE   NUMBER
    )
    --表的約束
    ALTER TABLE STUDENT ADD CONSTRAINT STUDENT$PK PRIMARY KEY(CODE);
    ALTER TABLE COURSE ADD CONSTRAINT COURSE$PK PRIMARY KEY(CODE);
    ALTER TABLE ST_CR ADD CONSTRAINT ST_CR$PK PRIMARY KEY(STUDENT, COURSE);
    ALTER TABLE ST_CR ADD CONSTRAINT ST_CR$FK$STUDENT FOREIGN KEY(STUDENT) REFERENCES STUDENT(CODE);
    ALTER TABLE ST_CR ADD CONSTRAINT ST_CR$FK$COURSE FOREIGN KEY(COURSE) REFERENCES COURSE(CODE);

    b.基于這三個(gè)表的視圖
    CREATE OR REPLACE VIEW STUDENT_STATUS AS
       SELECT S.CODE S_CODE, S.LNAME STUDENT, C.CODE C_CODE, C.CNAME COURSE, SC.GRADE GRADE
          FROM STUDENT S, COURSE C, ST_CR SC
            WHERE S.CODE = SC.STUDENT
              AND C.CODE = SC.COURSE

    c.基于視圖的觸發(fā)器
    CREATE OR REPLACE TRIGGER TRI_STCR INSTEAD OF INSERT ON STUDENT_STATUS
       FOR EACH ROW
    DECLARE
      W_ACTION VARCHAR2(1);
    BEGIN
      IF    INSERTING THEN
        W_ACTION := 'I';
      ELSE
        RAISE PROGRAM_ERROR;
      END IF;
        INSERT INTO STUDENT(CODE, LNAME) VALUES(:NEW.S_CODE,:NEW.STUDENT);
        INSERT INTO COURSE(CODE, CNAME) VALUES(:NEW.C_CODE, :NEW.COURSE);
        INSERT INTO ST_CR(STUDENT, COURSE, GRADE)
           VALUES(:NEW.S_CODE, :NEW.C_CODE, :NEW.GRADE);
    END;

    d.對(duì)視圖執(zhí)行數(shù)據(jù)插入
    INSERT INTO STUDENT_STATUS(S_CODE, STUDENT, C_CODE, COURSE, GRADE)
           VALUES('001','Mike','EN','English',86);

    可以看到每個(gè)表各有一條數(shù)據(jù)已經(jīng)插入.

    posted on 2009-10-14 17:51 譚明 閱讀(5160) 評(píng)論(2)  編輯  收藏 所屬分類: Oracle

    評(píng)論:
    # re: Oracle Instead of Trigger的用法[未登錄] 2010-12-19 15:27 | abc
    c.基于視圖的觸發(fā)器
    CREATE OR REPLACE VIEW STUDENT_STATUS AS
    SELECT S.CODE S_CODE, S.LNAME STUDENT, C.CODE C_CODE, C.CNAME COURSE, SC.GRADE GRADE
    FROM STUDENT S, COURSE C, ST_CR SC
    WHERE S.CODE = SC.STUDENT
    AND C.CODE = SC.COURSE
    這只是視圖啊,不是觸發(fā)器  回復(fù)  更多評(píng)論
      
    # re: Oracle Instead of Trigger的用法 2010-12-20 09:36 | 譚明
    謝謝你的提醒,已經(jīng)加上  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 免费看韩国黄a片在线观看| 免费人成网站在线播放| 亚洲av永久无码精品天堂久久| 中国xxxxx高清免费看视频| 亚洲国产综合精品中文第一| 日本不卡免费新一二三区| 一个人看的www视频免费在线观看| 亚洲色偷偷综合亚洲AVYP| 国产精成人品日日拍夜夜免费| 亚洲视屏在线观看| 卡1卡2卡3卡4卡5免费视频| 人妻无码中文字幕免费视频蜜桃| 久久精品国产亚洲AV麻豆不卡 | 亚洲乱亚洲乱淫久久| 成年美女黄网站18禁免费 | 69xx免费观看视频| 一级毛片**免费看试看20分钟| 亚洲综合激情视频| 亚洲成A人片在线观看中文| 18观看免费永久视频| 免费国产va在线观看| 亚洲国产精品白丝在线观看| 亚洲日韩国产精品乱| 国产精品成人免费一区二区| 国产免费AV片在线观看| 亚洲爆乳AAA无码专区| 亚洲情a成黄在线观看动漫尤物| 波多野结衣免费视频观看| 国产精品1024永久免费视频 | 羞羞视频免费网站在线看| 中文字幕亚洲综合小综合在线| 亚洲国产另类久久久精品| 国产成人免费网站在线观看| 在线成人爽a毛片免费软件| 国产视频精品免费视频| 久久久久亚洲AV无码去区首| 亚洲ts人妖网站| 亚洲美女视频一区| 亚洲AV无码成人精品区在线观看| 免费国产不卡午夜福在线| 猫咪社区免费资源在线观看|