Domanda

Di che hai generare DDL per creare tutte le tabelle db ecc tramite Hibernate SchemaExport ecc Quello che si ottiene è uno script che inizia con le dichiarazioni goccia all'inizio. Non è un problema, come io voglio questo. Ma l'esecuzione di questo script produce un crapload di ORA-00942 errori in esecuzione su un db Oracle.

Dal momento che non sono realmente errori se solo non esistevano ancora i tavoli, mi piacerebbe creare il mio script di essere privo di errori quando si esegue quindi è facile determinare quali (se del caso) non è riuscito.

Quali sono le opzioni? Voglio dichiarazioni goccia generati dal momento possono o non possono esistere ancora tavoli, ma non voglio un ORA-s tornando milioni a me che devo controllare (per determinare se sono errori effettivi) solo perché couldn' t cadere una tabella che di nuovo di zecca.

È stato utile?

Soluzione

Se si ottiene uno script di dichiarazioni goccia, e Hibernate non farlo per voi allora avvolgere le normative DROP TABLE in un IF per verificare se la tabella esiste prima di cadere:

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

Altri suggerimenti

  

"Di che hai generare DDL per creare tutto   le tabelle db ecc tramite Hibernate   SchemaExport ecc Quello che si ottiene è un   script che inizia con goccia   dichiarazioni all'inizio. non è un   problema, come io voglio questo. ma in esecuzione   questo script produce un crapload di   ORA-00942 errori in esecuzione su Oracle   db ".

Idealmente dovremmo mantenere il nostro schema correttamente, utilizzando controllo del codice sorgente e la gestione della configurazione delle migliori pratiche. In questo scenario sappiamo in anticipo se lo schema si corre nostri script contro contiene tali tabelle. Non otteniamo errori perché non tentare di eliminare tabelle che non esistono.

Tuttavia, non è sempre possibile farlo. Un approccio alternativo è quello di avere due script. Il primo script ha appena le dichiarazioni DROP TABLE, preceduto con un amichevole

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

Il secondo script ha tutte le istruzioni CREATE TABLE e porta via con

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

Un'altra opzione è quella di utilizzare il dizionario dei dati:

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

Fare attenzione con questo. E 'l'opzione nucleare e cadrà ogni tavolo nello schema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top