向用户授予所有程序

时间:2018-01-31 12:28:37

标签: sql oracle stored-procedures plsql

当我通过将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;

那么有什么区别,以及为什么不对程序起作用。

1 个答案:

答案 0 :(得分:0)

尝试显示所有语句,然后运行所有语句。其中一个肯定会给你这个错误!

试试这个:

SET serveroutput ON;
DECLARE
  v_sql VARCHAR2(4000);
BEGIN
  FOR R IN
  (SELECT OWNER,
    OBJECT_NAME
  FROM ALL_OBJECTS
  WHERE owner    = 'MY_SCHEMA'
  AND OBJECT_TYPE='PROCEDURE'
  )
  LOOP
    v_sql:= 'GRANT ALL ON '|| R.OWNER ||'.'||R.OBJECT_NAME ||' TO MyUser';
    dbms_output.put_line(v_sql);
  END LOOP;
END;

然后运行所有这些语句,以便找到导致错误的确切语句。