ITPub博客

首页 > 数据库 > Oracle > oracle triger器

oracle triger器

原创 Oracle 作者:xiaoyan5686670 时间:2016-04-18 17:16:45 0 删除 编辑
触发器使用定义了这些权限的表的所有者的权限(而不是导致触发器触发的用户的权限,并且不是创建该触发器的用户的权限)执行。
在触发器引用表时,它使用表创建者的组成员资格找到没有指定的显示所有者名称的表。例如,如果 user_1.Table_A 上的触发器引用 Table_B,并且没有指定 Table_B 的所有者,那么,Table_B 就必须已经由 user_1 创建,或者,user_1 必须(直接或间接地)是作为 Table_B 的所有者的某个组的成员。如果这两个条件都不具备,该触发器触发时将出现消息 [没有找到表]。
此外,user_1 必须具有执行该触发器中指定的表的操作的权限。
所以我们需要b用户给a用户‘table_B’表的操作权限.(如果在a用户的‘table_A’表上的触发器中有对b用户‘table_B’表进行增、删、改的操作,那么就需要b用户给a用户‘table_B’表的增、删、改操作权限).
权限: SELECT(读), INSERT(追加), UPDATE(写),DELETE GRANT 权限 ON 表名 TO 用户名;

注意:用这条语句的用户必须是表的所有者.
比如上面表Table_A用户是 user_1  ,表Table_B用户是 user_2
则需要登录 user_2 然后GRANT 权限 ON Table_B TO user_1 ;

不在同一用户的表,另一用户要访问,必须赋予权限:

GRANT insert,select,delete ON sda_user.a_result_base TO swda_dev;


create or replace TRIGGER a_result_base_triger
AFTER INSERT OR UPDATE OR DELETE
ON swda_dev.a_result_base
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
BEGIN
IF INSERTING THEN
   INSERT INTO SDA_USER.a_result_base(CONDITION_ID,DATA_DT,FREQUENCY_CD,INDEX_CD,INDEX_VALUE,APP_KEY)
   VALUES(:NEW.CONDITION_ID,:NEW.DATA_DT,:NEW.FREQUENCY_CD,:NEW.INDEX_CD,:NEW.INDEX_VALUE,:NEW.APP_KEY);
   ELSIF DELETING THEN
   DELETE FROM SDA_USER.a_result_base WHERE APP_KEY=:OLD.APP_KEY and INDEX_CD=:OLD.INDEX_CD and DATA_DT=:OLD.DATA_DT;
   END IF;
END  a_result_base_triger;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22569416/viewspace-2083504/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-07-25

  • 博文量
    108
  • 访问量
    276044