我执行了下面的脚本并且有效:
BEGIN
FOR cur_rec IN (SELECT object_name, object_type
FROM user_objects
WHERE object_type IN
('TABLE',
'VIEW',
'PACKAGE',
'PROCEDURE',
'FUNCTION',
'SEQUENCE'
))
LOOP
BEGIN
IF cur_rec.object_type = 'TABLE'
THEN
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '" CASCADE CONSTRAINTS';
ELSE
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"';
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ( 'FAILED: DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"'
);
END;
END LOOP;
END;
/
但问题是,在此之后,我无法在我的数据库中授予,创建或删除等,即使我正在使用sysdba用户。
我收到错误:
ORA-00604:递归SQL级别1发生错误 ORA-00942:表或视图不存在
请帮忙。感谢。
答案 0 :(得分:3)
递归SQL错误的一个可能原因是触发器。您可能遇到过这种情况:
要获取所有触发器的列表,您可以使用
select * from dba_triggers
where trigger_type not in ('BEFORE EACH ROW','AFTER EACH ROW')
(您可以排除行级触发器,因为它们在概念上属于表,并且在删除表时会自动删除)。在确定违规触发器后,您可以禁用或删除它。