当我通过将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;
那么有什么区别,以及为什么不对程序起作用。
答案 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;
然后运行所有这些语句,以便找到导致错误的确切语句。