触发器使用定义了这些权限的表的所有者的权限(而不是导致触发器触发的用户的权限,并且不是创建该触发器的用户的权限)执行。 在触发器引用表时,它使用表创建者的组成员资格找到没有指定的显示所有者名称的表。例如,如果 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博客 ” ,链接:http://blog.itpub.net/22569416/viewspace-2083504/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22569416/viewspace-2083504/