Frage

Sagen Sie DDL generieren alle Ihre db Tabellen usw. über Hibernate Schema usw. zu erstellen Was man bekommt, ist ein Skript, das am Anfang mit Drop-Anweisungen beginnt. Kein Problem, wie ich das will. Aber dieses Skript ausgeführt wird produziert eine crapload von ORA-00942 Fehler auf einer Oracle-DB ausgeführt wird.

Da sie nicht wirklich Fehler sind, wenn die Tabellen nur noch nicht vorhanden sind, würde ich meinen wie Skript fehlerfrei sein, wenn er ausgeführt wird, so ist es einfach, zu bestimmen, was (wenn überhaupt) ist fehlgeschlagen.

Was sind meine Optionen? Ich will Drop-Anweisungen generiert, da Tabellen oder noch nicht vorhanden sein können, aber ich will nicht eine Million ORA-s bei mir zurückkommen, dass ich zu überprüfen (um festzustellen, ob sie tatsächliche Fehler), nur weil es couldn‘ t fällt eine Tabelle, die die Marke neu.

War es hilfreich?

Lösung

Wenn Sie ein Skript von Drop-Anweisungen erhalten, und Hibernate wird es nicht für Sie tun dann die DROP TABLE-Anweisungen in einer IF-Test wickeln, wenn die Tabelle, bevor sie fallen vorhanden ist:

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

Andere Tipps

  

"Sagen Sie DDL generieren alle zu schaffen   Ihre db Tabellen usw. über Hibernate   Schema etc. Was man bekommt, ist ein   Skript, das mit Tropfen beginnt   Aussagen am Anfang. Kein   Problem, da ich dies will. aber läuft   Dieses Skript erzeugt eine crapload von   ORA-00942-Fehler auf einem Oracle-Lauf   db. "

Im Idealfall sollten wir unser Schema richtig halten, die Quellcodeverwaltung verwenden und Konfigurationsmanagement Best Practices. In diesem Szenario wissen wir vorher, ob das Schema wir unsere Skripte gegen enthält die Tabellen ausgeführt werden. Wir bekommen keine Fehler, weil wir Tabellen nicht fallen versuchen, die nicht existieren.

Allerdings ist es nicht immer möglich, dies zu tun. Ein alternativer Ansatz ist zwei Skripte zu haben. Das erste Skript hat nur die DROP TABLE-Anweisungen, mit einem freundlichen

voran
PROMPT  It is safe to ignore any ORA-00942 errors in the following statements

Das zweite Skript hat alle CREATE TABLE-Anweisungen und führt aus mit

PROMPT  All the statements in this script should succeed.  So investigate any errors

Eine andere Möglichkeit ist es, das Datenwörterbuch zu verwenden:

begin
    for r in ( select table_name from user_tables )
    loop
        execute immediate 'drop table '||r.table_name
                    ||' cascade constraints';
    end loop;
end;

Seien Sie mit diesem vorsichtig. Es ist die nukleare Option und wird jede Tabelle in Ihrem Schema fällt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top