Oracle Instead of Trigger的用法

Oracle Instead of Trigger的用法

1. instead of trigger 是基于视图建立的,不能建在表上,为什么要建在视图上,一般的视图如果其数据来源一个表并且包含该表的主键,就可以对视图进行DML操作.另外一种情况是从多个表查询出来的.这样我们就不能对视图进行操作了,也就是只能查询.instead of trigger可以解决建在多表上视图的更新操作.
2.下面我们就来实例操作:
a.先建表,简单点就三个分别是学生表,课程表,学生选课表
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.基于这三个表的视图
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.基于视图的触发器
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.对视图执行数据插入
INSERT INTO STUDENT_STATUS(S_CODE, STUDENT, C_CODE, COURSE, GRADE)
       VALUES('001','Mike','EN','English',86);

可以看到每个表各有一条数据已经插入.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9606200/viewspace-745691/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9606200/viewspace-745691/

Oracle Instead of Trigger的用法相关推荐

  1. oracle 数据库 触发器 trigger 语法

    http://shixm.iteye.com/blog/401564 关键字: oracle 数据库 触发器 trigger 语法 语法规则: Create [or replace] trigger ...

  2. oracle中的merge into用法解析

    oracle中的merge into用法解析 merge into的形式 MERGE INTO [target-table] A USING [source-table sql] B ON([cond ...

  3. oracle中over()分析函数的用法

    摘自: http://www.poluoluo.com/jzxy/201004/81921.html 百度文库也记载了oracle中over()分析函数的用法 在泡坛子的时候中无意中发现了这个函数,才 ...

  4. oracle中的to_number,Oracle中to_number()函数的用法

    to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...

  5. Oracle中to_char()函数的用法

    Oracle中to_char()函数的用法 日期转换: to_char(date,'格式') select to_date('2005-01-01 ','yyyy-MM-dd') from dual; ...

  6. oracle的substr函数的用法

    oracle的substr函数的用法  取得字符串中指定起始位置和长度的字符串   substr( string, start_position, [ length ] )  如:      subs ...

  7. oracle to_char函数格式,oracle 中to_char函数的用法

    一.日期格式转换 to_char(date,'格式'); select to_date('2005-01-01 ','yyyy-MM-dd') from dual; select to_char(sy ...

  8. Oracle中add_months()函数的用法

    Oracle中add_months()函数的用法 查询当前时间n个月以前的时间: select add_months(sysdate,-n) from dual; 查询当前时间n个月之后的时间: se ...

  9. bulk怎么使用oracle,oracle学习之bulk collect用法

    通过bulk collect减少loop处理的开销,使用Bulk Collect提高Oracle查询效率 Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使 ...

  10. oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

最新文章

  1. 免费报名 | 微软全双工语音对话以及在智能硬件上的应用
  2. springboot_4 spring boot 使用servlet,filter,listener和interceptor
  3. tomcat端口问题
  4. Java RMI 框架(远程方法调用)
  5. 如何快速搭建开放、多租户的电商云平台
  6. 抽象工厂模式(C#)
  7. S11 Linux系统管理命令
  8. 嵌入式系统开发之根文件系统
  9. 安装mysql-community-server报错缺少libaio依赖
  10. 题解 P2212 【[USACO14MAR]浇地Watering the Fields】
  11. 远程桌面 vs 虚拟桌面 vs 虚拟机区别
  12. 防火墙基础之路由器与防火墙单臂路由和DHCP接口地址池的配置
  13. 用CSS实现设置网页文字为只读,不可复制的方法
  14. Libra,一场赛博朋克噩梦!
  15. 实时网速显示_实例_python
  16. Apache Mina Demo
  17. KNN算法(二) sklearn KNN实践
  18. shell入门基础知识
  19. IIS的404页面乱码:鏃犳硶鏄剧ず椤甸潰锛屽洜涓哄彂鐢熷唴閮ㄦ湇鍔″櫒閿欒銆�的解决方法
  20. 最近调试HEVC中码率控制, 发现HM里面一个重大bug

热门文章

  1. Visual Studio Code——做嵌入式C/C++开发常用的编辑器软件安装及基本使用总结
  2. 文本信息过滤中的变体词识别(一)
  3. Java中 Tomcat 是干什么的?
  4. 师从施一公,4年8篇CNS,作为西湖大学博士后,她又以一作发了Science
  5. 全国各地网站备案的通过时间表
  6. 根2是无理数的几种证明方法
  7. html word 页面视图,word页面视图视图和web视图的区别
  8. 巨详细一文教你如何撰写商业计划书
  9. reset()方法 submit()方法
  10. MySQL gtid purge_MySQL中set gtid_purged的行为变更及对备份恢复的影响