oracle创建视图触发器

1.视图触发器语法

oracle创建视图触发器_第1张图片

2.视图触发器作用

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

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

oracle创建视图触发器_第2张图片

3.视图触发器实例

-- 创建视图触发器,实现向视图中插入数据,可以同时向构成视图的多个表插入数据

-- 1.创建两个测试表  登陆信息表t_login  用户详细信息表t_detail
create table t_login(id number(4) primary key,username varchar2(20),password varchar2(20));
create table t_detail(id number(4) primary key,realname varchar2(20),age number(3));


-- 2.使用触发器和序列给两个表格实现主键自增功能
-- 2.1创建序列
create sequence seq_login;
create sequence seq_detail;

-- 2.2创建触发器 
-- 2.2.1给t_login创建主键自增触发器
create or replace trigger trigger_login
before insert on t_login
-- 此处referencing New as newlogin 省略   注意:newlogin是全局变量,所以使用时一定要加冒号:
referencing New as newlogin
for each row

begin
if :newlogin.id is null then
    select seq_login.nextval into :newlogin.id from dual;   
end if;
end;
/

-- 2.2.2给t_detail创建主键自增触发器
create or replace trigger trigger_detail
before insert on t_detail
for each row
begin
    if :NEW.id is null then
        :NEW.id := seq_detail.nextval;
    end if;
end;
/

-- 测试主键自增功能
delete from t_login;
delete from t_detail;
insert into t_login(username,password) values ('admin','123');
insert into t_detail(realname,age) values ('system',200);


-- 3.创建两个表t_login,t_detail查询的结果视图
create or replace view v_login_detail as 
select l.id,l.username,l.password,d.realname,d.age from t_login l,t_detail d where l.id=d.id;
-- 查询视图中的数据
select * from v_login_detail;


-- 4.测试未使用视图触发器前的,能否实现向视图v_login_detail中插入数据,同时向表t_login,t_detail插入数据
insert into v_login_detail(username,password,realname,age) values('test1','123','scott',30);


-- 5.创建视图触发器
create or replace trigger trigger_view_login_detail 
instead of insert on v_login_detail
for each row

begin
insert into t_login(username,password) values (:NEW.username,:NEW.password);
insert into t_detail(realname,age) values (:NEW.realname,:NEW.age);
end;
/

-- 创建视图触发器后测试
insert into v_login_detail(username,password,realname,age) values('test1','123','scott',30);

你可能感兴趣的:(Oracle,ORACLE)