PL / SQL函数语句忽略错误

时间:2016-04-07 12:47:26

标签: oracle function

我想创建截断所有用户对象的功能, 这是我的剧本

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

但是当我执行此代码而不执行函数时,操作就完成了!

2 个答案:

答案 0 :(得分:1)

您的用户没有访问DBA_OBJECTS的权限

答案 1 :(得分:1)

也许有些对象需要带引号的标识符(例如使用小写字母),请尝试

select 'drop '||object_type||' '||owner||'. "'|| object_name||'"'|| ...