说你生成DDL创建所有的数据库表等通过休眠的SchemaExport等你得到的是与在开始下降语句开头的脚本。不是一个问题,因为我想这一点。但是,运行此脚本生成的Oracle数据库运行ORA-00942错误的crapload。

由于他们如果表只是还不存在不是真正的错误,我想我创建的脚本没有错误时,它执行,因此很容易确定什么(如果有的话)失败。

什么是我的选择?我确实想产生下降语句,因为表可能会或可能还不存在,但我不希望在我,我要检查一百万ORA-S回来(以确定他们是否是真正的错误消息),只是因为它couldn”吨下降的表中的全新的。

有帮助吗?

解决方案

如果你得到下降语句的脚本,Hibernate不会为你做它,然后删除它之前包裹在IF的DROP TABLE语句来测试,如果表中存在:

IF EXISTS(SELECT NULL 
            FROM TABLE_XYZ) THEN
  DROP TABLE TABLE_XYZ;
END IF;

其他提示

  

“说你生成DDL创建所有   你的数据库表等通过休眠   SchemaExport工具等你得到的是一个   脚本与开始下降   语句开头。不是   问题,我想这一点。但运行   这个脚本产生的crapload   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;

小心使用这一个。这是核选择,并会在你的schema的每个表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top