“假设您生成 ddl 以通过 Hibernate SchemaExport 等创建所有数据库表等。您得到的是一个以 drop 语句开头的脚本。这不是问题,因为我想要这个。但是运行这个脚本会产生大量 ORA -00942 在 Oracle 数据库上运行的错误。”
理想情况下,我们应该使用源代码控制和配置管理最佳实践来正确维护我们的模式。在这种情况下,我们事先知道我们运行脚本的模式是否包含这些表。我们不会收到错误,因为我们不会尝试删除不存在的表。
然而,并不总是可以做到这一点。一种替代方法是有两个脚本。第一个脚本只有 DROP TABLE 语句,以友好的开头
PROMPT It is safe to ignore any ORA-00942 errors in the following statements
第二个脚本包含所有 CREATE TABLE 语句并以
PROMPT All the statements in this script should succeed. So investigate any errors
另一种选择是使用数据字典:
begin
for r in ( select table_name from user_tables )
loop
execute immediate 'drop table '||r.table_name
||' cascade constraints';
end loop;
end;
小心这个。这是核心选项,将删除架构中的每个表。