postgresql 多表可更新视图——触发器

//创建视图

create view v_user2 as
select s.sid,u.sid as uid,s.id,s.name,u.uname,u.password,u.power
from student s join  users u
on s.sid = u.sid;

CREATE OR REPLACE FUNCTION v_user2_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
insert into users(uname,password,power)values(new.uname,new.password,new.power);
insert into student(id,name) values(new.id,new.name);
RETURN NULL;
END;$$
LANGUAGE Plpgsql;

CREATE OR REPLACE FUNCTION v_user2_update_trigger()
RETURNS TRIGGER AS $$
BEGIN
update users set uname=new.uname,password=new.password,power=new.power where sid=new.sid;
update student set id=new.id,name=new.name where sid=new.sid;
RETURN NULL;
END; $$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION v_user2_delete_trigger()
RETURNS TRIGGER AS $$
BEGIN
DELETE FROM users WHERE sid= old.sid;
DELETE FROM student WHERE sid= old.sid;
RETURN NULL;
END; $$
LANGUAGE plpgsql;

CREATE TRIGGER insert_v_users_trigger
    INSTEAD OF INSERT ON v_user2
    FOR EACH ROW EXECUTE PROCEDURE v_user2_insert_trigger();
CREATE TRIGGER update_v_users_trigger
    INSTEAD OF UPDATE ON v_user2
    FOR EACH ROW EXECUTE PROCEDURE v_user2_update_trigger();
CREATE TRIGGER delete_v_users_trigger
    INSTEAD OF DELETE ON v_user2
    FOR EACH ROW EXECUTE PROCEDURE v_user2_delete_trigger();

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值