oracle创建视图触发器

落日映苍穹つ 2022-06-13 13:29 1016阅读 0赞

1.视图触发器语法

这里写图片描述

2.视图触发器作用

使用视图触发器,可以实现对视图进行增删改时,同时对视图相关的表进行增删改。

强行向视图中插入数据时会报如下错误:

这里写图片描述

3.视图触发器实例

  1. -- 创建视图触发器,实现向视图中插入数据,可以同时向构成视图的多个表插入数据
  2. -- 1.创建两个测试表 登陆信息表t_login 用户详细信息表t_detail
  3. create table t_login(id number(4) primary key,username varchar2(20),password varchar2(20));
  4. create table t_detail(id number(4) primary key,realname varchar2(20),age number(3));
  5. -- 2.使用触发器和序列给两个表格实现主键自增功能
  6. -- 2.1创建序列
  7. create sequence seq_login;
  8. create sequence seq_detail;
  9. -- 2.2创建触发器
  10. -- 2.2.1t_login创建主键自增触发器
  11. create or replace trigger trigger_login
  12. before insert on t_login
  13. -- 此处referencing New as newlogin 省略 注意:newlogin是全局变量,所以使用时一定要加冒号:
  14. referencing New as newlogin
  15. for each row
  16. begin
  17. if :newlogin.id is null then
  18. select seq_login.nextval into :newlogin.id from dual;
  19. end if;
  20. end;
  21. /
  22. -- 2.2.2t_detail创建主键自增触发器
  23. create or replace trigger trigger_detail
  24. before insert on t_detail
  25. for each row
  26. begin
  27. if :NEW.id is null then
  28. :NEW.id := seq_detail.nextval;
  29. end if;
  30. end;
  31. /
  32. -- 测试主键自增功能
  33. delete from t_login;
  34. delete from t_detail;
  35. insert into t_login(username,password) values ('admin','123');
  36. insert into t_detail(realname,age) values ('system',200);
  37. -- 3.创建两个表t_login,t_detail查询的结果视图
  38. create or replace view v_login_detail as
  39. select l.id,l.username,l.password,d.realname,d.age from t_login l,t_detail d where l.id=d.id;
  40. -- 查询视图中的数据
  41. select * from v_login_detail;
  42. -- 4.测试未使用视图触发器前的,能否实现向视图v_login_detail中插入数据,同时向表t_login,t_detail插入数据
  43. insert into v_login_detail(username,password,realname,age) values('test1','123','scott',30);
  44. -- 5.创建视图触发器
  45. create or replace trigger trigger_view_login_detail
  46. instead of insert on v_login_detail
  47. for each row
  48. begin
  49. insert into t_login(username,password) values (:NEW.username,:NEW.password);
  50. insert into t_detail(realname,age) values (:NEW.realname,:NEW.age);
  51. end;
  52. /
  53. -- 创建视图触发器后测试
  54. insert into v_login_detail(username,password,realname,age) values('test1','123','scott',30);

发表评论

表情:
评论列表 (有 0 条评论,1016人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Oracle创建、修改视图

    视图:是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表,Oracle的数据库对象分为五种:表,视图,序列,索引和

    相关 oracle 创建视图view

          视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。视图来

    相关 Oracle创建视图

    > 视图的优点: 1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 2.用户通过简单的查询可以从复杂查询中得到结果。 3.维护数据的独立性,试图可从多个表

    相关 oracle创建触发器

    原因是:序列是在系统管理员权限下建的,而触发器又是在普通用户下建的,所以,在触发器中使用系统管理员权限下建的序列就无效了。 解决方法:同一个用户下建序列和触发器,即可。