Elimina ORA-00942 errori nel ddl creare script
-
27-09-2019 - |
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.
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.