gpt4 book ai didi

oracle - 删除 Oracle 模式中的所有对象

转载 作者:行者123 更新时间:2023-12-05 09:14:47 27 4
gpt4 key购买 nike

我正在尝试构建一个脚本来删除数据库中的所有对象,因此通过以下选择,构建一个要执行的过程,这将使数据库完全干净(没有删除数据库并重新创建它的权限) .首先删除所有序列、索引等,然后删除表。

select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')

考虑到这一点,我认为这样的事情可行:

BEGIN

FOR i IN (select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX'))
LOOP
EXECUTE IMMEDIATE i;
END LOOP;

END;
/

但是我得到:

Error report - ORA-06550: line 5, column 27: PLS-00382: expression is of wrong type ORA-06550: line 5, column 9: PL/SQL: Statement ignored 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:

知道如何执行此操作吗?

最佳答案

execute immediate 需要一个字符串(或 varchar2)参数。你给它一个游标行。给您选择的值一个别名并将其用作参数,并且不要在语句中包含分号,如下所示:

begin
for i in (select 'drop ' || object_type || ' ' || object_name as stmt
from user_objects
where object_type in ('VIEW', 'PACKAGE', 'SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')) loop
execute immediate i.stmt;
end loop;
end;
/

关于oracle - 删除 Oracle 模式中的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53506415/

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