【发布时间】:2018-01-31 12:28:37
【问题描述】:
当我通过将object_type替换为表[OBJECT_TYPE='TABLE']来执行以下语句时,它执行成功,当我尝试如下过程时,它返回错误:表或视图不退出。
BEGIN
FOR R IN (SELECT OWNER, OBJECT_NAME FROM ALL_OBJECTS WHERE owner = 'MY_SCHEMA' AND OBJECT_TYPE='PROCEDURE') LOOP
execute IMMEDIATE 'GRANT ALL ON '|| R.OWNER ||'.'||R.OBJECT_NAME ||' TO MyUser';
END LOOP;
END;
注意:当我也尝试作为单个语句执行时,它会成功运行。
GRANT ALL ON MY_SCHEMA.ProcedureName TO MyUser;
那么有什么区别,为什么在程序上不起作用。
【问题讨论】:
-
我在这里删除了多个 RDBMS 标签;这显然不是 t-sql,但请用正确的更新您的帖子。
-
为什么不授予您对整个架构的权限?
-
我想将用户模式 A 的所有权限授予另一个用户模式 B 并且除了授予所有表或过程然后创建所有对象的同义词之外,没有办法在一个语句中授予所有权限。 @dan-bracuk
-
对我来说很好。这会在列表中的第一个过程中失败,还是在失败之前有某种方式?如果有一个失败了,而其他人成功了,你需要找出它有什么不同。我怀疑一些命名空间冲突(例如,公共同义词恰好与过程共享相同的名称),尽管我想不出任何会像这样失败的场景。
标签: sql oracle stored-procedures plsql