【发布时间】:2019-01-18 15:50:31
【问题描述】:
我收到一条关于我已成功创建的触发器的错误消息。
我试过了……
GRANT SELECT ON OTHER_TABLE TO [me];
call SYS.DBA_ASSIST.GRANT_OBJ_PERMS('dbo.MYTABLE','SELECT','dbo.OTHER_TABLE');`
这里是触发器的代码...
CREATE OR REPLACE TRIGGER PREVENT_INVALID_ID
BEFORE INSERT OR UPDATE ON dbo.MYTABLE
FOR EACH ROW
DECLARE ROW_COUNT NUMBER;
BEGIN
SELECT COUNT(*) INTO ROW_COUNT
FROM [OTHER_TABLE] WHERE OTHER_TABLE_ID = :new.MYTABLE_ID;
IF ROW_COUNT = 0 THEN
RAISE_APPLICATION_ERROR(-20101, 'The ID provided is invalid.');
END IF;
END;`
user_errors 中的错误消息是“PL/SQL: ORA-00942: table or view does not exist”
知道如何获得访问 OTHER_TABLE 的触发器吗?
我了解无法授予触发器访问/授权。但我不清楚我需要运行什么代码才能让触发器工作。
提前致谢, 乔什
【问题讨论】:
-
如果这是针对 Oracle 的,则不能命名表 [OTHER_TABLE]。如果 OTHER_TABLE_ID 是主键或唯一索引,为什么不在表 dbo.MYTABLE 上使用外键?
-
同意。执行此规则的标准方式(有效且唯一安全的方式)是使用外键约束。使用触发器是一种糟糕的做法。
标签: oracle plsql triggers sql-grant