gpt4 book ai didi

oracle - PLSQL-删除用户的所有数据库对象

转载 作者:行者123 更新时间:2023-12-03 13:21:06 28 4
gpt4 key购买 nike

我正在尝试使用一个过程(无参数)来删除位于该过程从中启动该过程的模式中的所有用户创建的数据库对象,但是我不确定如何执行此操作。到目前为止,这是我所拥有的,但是我想我正在以错误的方式进行操作。


create or replace procedure CLEAN_SCHEMA is
cursor schema_cur is
select 'drop '||object_type||' '|| object_name|| DECODE(OBJECT_TYPE,'TABLE',' CASCADE CONSTRAINTS;',';')
from user_objects;
schema_rec schema_cur%rowtype;
begin
select 'drop '||object_type||' '|| object_name|| DECODE(OBJECT_TYPE,'TABLE',' CASCADE CONSTRAINTS;',';')
into schema_rec
from user_objects;
end;
/

最佳答案

create or replace
FUNCTION DROP_ALL_SCHEMA_OBJECTS RETURN NUMBER AS
PRAGMA AUTONOMOUS_TRANSACTION;
cursor c_get_objects is
select object_type,'"'||object_name||'"'||decode(object_type,'TABLE' ,' cascade constraints',null) obj_name
from user_objects
where object_type in ('TABLE','VIEW','PACKAGE','SEQUENCE','SYNONYM', 'MATERIALIZED VIEW')
order by object_type;
cursor c_get_objects_type is
select object_type, '"'||object_name||'"' obj_name
from user_objects
where object_type in ('TYPE');
BEGIN
begin
for object_rec in c_get_objects loop
execute immediate ('drop '||object_rec.object_type||' ' ||object_rec.obj_name);
end loop;
for object_rec in c_get_objects_type loop
begin
execute immediate ('drop '||object_rec.object_type||' ' ||object_rec.obj_name);
end;
end loop;
end;
RETURN 0;
END DROP_ALL_SCHEMA_OBJECTS;


创建上述函数(是自主的,因此可以通过函数调用DDL)
那么您可以:

select DROP_ALL_SCHEMA_OBJECTS from dual;


当您想删除所有对象时,请确保不要尝试删除运行的proc(我不在乎proc,这就是为什么我在object_type列表中没有proc或函数)

如果要删除所有内容,则需要匿名块

但是我需要能够通过仅允许ansi sql(而不是plsql)的工具来执行此操作,因此需要存储的proc。

请享用。

关于oracle - PLSQL-删除用户的所有数据库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/842530/

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