触发器的实现


实现Oracle数据库中不同用户下的表之间的更新联动操作。
今天,老师突然让我写一个触发器,实现在admin用户下的admin表进行更新操作时,files用户下的files表同时进行相应操作。

检查权限问题

由于我是对不同用户下的两个表进行操作,所以我先查看了权限的问题。

// 查询当前用户拥有的对象权限;
SELECT * FROM USER_TAB_PRIVS;

使用这个语句可以看到对表是否有更新的的权限。

赋予权限

因为我这个用户没有这个权限,所以我到file用户下对admin赋予了增删改的权限。

// 赋予用户增删改的权力;
GRANT DELETE ON  FILES.FILES TO ADMIN;
GRANT UPDATE ON  FILES.FILES TO ADMIN;
GRANT INSERT ON  FILES.FILES TO ADMIN;

生成触发器

因为触发器的语句太多了,所以我分着写了三个触发器,分别实现增删改的功能。

// update时的触发器;
CREATE OR REPLACE TRIGGER admin_update
BEFORE UPDATE ON admin.admin
FOR EACH ROW
BEGIN
  UPDATE files.files 
	set ID =TO_CHAR(:NEW.ID),
	LID=TO_CHAR(:NEW.LID),
	TYPE='treetype' ||:NEW.TYPE,
	NAME=:NEW.NAME,
	CREATE_TIME=:NEW.CREATE_TIME,
	UPDATE_TIME=:NEW.UPDATE_TIME  where ID=TO_CHAR(:OLD.ID);
END;
// delete时的触发器;
CREATE OR REPLACE TRIGGER admin_delete
BEFORE DELETE ON admin.admin
FOR EACH ROW
BEGIN
  DELETE FROM  files.files WHERE ID =:OLD.ID;
END;
// insert时的触发器;
CREATE OR REPLACE TRIGGER admin_insert
AFTER INSERT ON admin.admin
FOR EACH ROW
BEGIN
  INSERT INTO files.files(ID, LID,TYPE,NAME,CREATE_TIME,UPDATE_TIME)
	    VALUES(:NEW.ID, :NEW.LID,'treetype' ||:NEW.TYPEID,:NEW.NAME,:NEW.CREATE_TIME,:NEW.UPDATE_TIME);
END;

主要注意三点:
1、Oracle的:OLD和:NEW,这个可以自行百度;
2、数据拼接形式:常量||变量,拼接符号为||.;
3、最为重要的一点是要注意两个表中的字段类型是否一致,若是不一致会报错误;

测试

主要是通过对admin数据库中的admin数据表执行插入、更新、删除操作时,files数据库中的files 表有没有实现联动的插入、更新、删除操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值