我想创建截断所有用户对象的功能, 这是我的剧本
CREATE OR REPLACE Function Truncate_user ( name_in IN varchar2 )
return number
is
cnumber number;
v_str1 varchar2(200) := null;
cursor get_sql is
select
'drop '||object_type||' '||owner||'. '|| object_name|| DECODE(OBJECT_TYPE,'TABLE',' CASCADE CONSTRAINTS PURGE') v_str1
from DBA_objects
where object_type in ('TABLE','VIEW','PACKAGE','TYPE','PROCEDURE','FUNCTION','TRIGGER','SEQUENCE','SYNONYM')
AND owner=name_in
order by object_type,object_name;
begin
open get_sql;
loop
fetch get_sql into v_str1;
if get_sql%notfound
then cnumber :=0;
end if;
execute immediate v_str1;
end loop;
RETURN 1;
close get_sql;
end;
/
执行后我得到了这些错误
Erreur(7,1): PL/SQL: SQL Statement ignored
Erreur(9,6): PL/SQL: ORA-00942: Table ou vue inexistante
但是当我执行此代码而不执行函数时,操作就完成了!
答案 0 :(得分:1)
您的用户没有访问DBA_OBJECTS的权限
答案 1 :(得分:1)
也许有些对象需要带引号的标识符(例如使用小写字母),请尝试
select 'drop '||object_type||' '||owner||'. "'|| object_name||'"'|| ...