我尝试创建一个触发器,该触发器自动授予对特定模式的所有新表的选择,只要在此模式中创建一个新表。
这方面的背景是 IBM InfoSphere Information Server 的异常数据库。该工具为 DataStage Jobs 中创建的异常创建新表,我希望一组开发人员能够查询这些表,而无需授予架构所有者的权限。
所以我的想法是创建一个这样的触发器:
create or replace trigger set_permissions
after create on schema
DECLARE
obj_name VARCHAR2(30) := DICTIONARY_OBJ_NAME;
BEGIN
IF DICTIONARY_OBJ_TYPE = 'TABLE'
THEN
GRANT SELECT ON c##ESDB_USER.obj_name TO c##DATASTAGE_USER;
END IF;
END set_permissions;
但编译触发器后出现错误“PLS-00103”。它说,“GRANT”不是预期的,而是期望以下之一:
( begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge json_exists json_value json_query json_object json_array
在我看来,触发器内不允许使用 GRANT。如果是这样,是否有另一种方法可以自动授予用户对特定架构内新表的选择权限?