作为我们的构建过程和不断发展的数据库的一部分,我正在尝试创建一个脚本,以删除用户的所有表和序列。我不想重新创建用户,因为这将需要比允许的更多的权限。
我的脚本创建了一个过程来删除表/序列,执行该过程,然后删除该过程。我从sqlplus中执行该文件:
drop.sql:
很遗憾,删除此存储过程会导致问题。似乎会引起竞争条件,并在执行之前删除该过程。
例如:
我的脚本创建了一个过程来删除表/序列,执行该过程,然后删除该过程。我从sqlplus中执行该文件:
drop.sql:
create or replace procedure drop_all_cdi_tables
is
cur integer;
begin
cur:= dbms_sql.OPEN_CURSOR();
for t in (select table_name from user_tables) loop
execute immediate 'drop table ' ||t.table_name|| ' cascade constraints';
end loop;
dbms_sql.close_cursor(cur);
cur:= dbms_sql.OPEN_CURSOR();
for t in (select sequence_name from user_sequences) loop
execute immediate 'drop sequence ' ||t.sequence_name;
end loop;
dbms_sql.close_cursor(cur);
end;
/
execute drop_all_cdi_tables;
/
drop procedure drop_all_cdi_tables;
/
很遗憾,删除此存储过程会导致问题。似乎会引起竞争条件,并在执行之前删除该过程。
例如:
SQL*Plus: Release 11.1.0.7.0 - 生产环境于 2010年3月30日 星期二 18时45分42秒
版权所有 (c) 1982, 2008,Oracle。保留所有权利。
已连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64位生产版本 包含分区、OLAP、数据挖掘和实用测试选项
过程创建完成。
PL/SQL 过程已成功完成。
过程创建完成。
过程已被删除。
drop procedure drop_all_user_tables * 第 1 行出现错误: ORA-04043: 对象 DROP_ALL_USER_TABLES 不存在
SQL> 已断开与 Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64 位生产版本的连接,包含分区、OLAP、数据挖掘和实用测试选项。
有什么办法可以解决这个问题吗?
ORA-00701: object necessary for warmstarting database cannot be altered
以及其他错误。有什么提示吗? - lbrahim