gpt4 book ai didi

sql - 在Oracle中删除所有用户表/序列

转载 作者:行者123 更新时间:2023-12-03 08:44:14 29 4
gpt4 key购买 nike

作为构建过程和不断发展的数据库的一部分,我试图创建一个脚本,该脚本将删除用户的所有表和序列。我不想重新创建用户,因为这将需要比所允许的更多的权限。

我的脚本创建了一个过程来删除表/序列,执行该过程,然后删除该过程。我正在从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:版本11.1.0.7.0-2010年3月30日星期二18:45:42投入生产

版权所有(c)1982、2008,Oracle。版权所有。

连接到:
Oracle Database 11g企业版11.1.0.7.0版-64位生产
使用分区,OLAP,数据挖掘和实际应用程序测试选项

过程已创建。

PL / SQL过程成功完成。

过程已创建。

程序已放弃。

删除过程drop_all_user_tables
*
第1行发生错误:
ORA-04043:对象DROP_ALL_USER_TABLES不存在

SQL>与Oracle Database 11g企业版11.1.0.7.0版断开连接-64
使用分区,OLAP,数据挖掘和实际应用程序测试选项

关于如何使它工作的任何想法?

最佳答案

如果您不打算保留存储过程,则可以使用anonymous PLSQL block:

BEGIN

--Bye Sequences!
FOR i IN (SELECT us.sequence_name
FROM USER_SEQUENCES us) LOOP
EXECUTE IMMEDIATE 'drop sequence '|| i.sequence_name ||'';
END LOOP;

--Bye Tables!
FOR i IN (SELECT ut.table_name
FROM USER_TABLES ut) LOOP
EXECUTE IMMEDIATE 'drop table '|| i.table_name ||' CASCADE CONSTRAINTS ';
END LOOP;

END;

关于sql - 在Oracle中删除所有用户表/序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2549718/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com