oracle创建视图触发器
1.视图触发器语法
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);
还没有评论,来说两句吧...