2013-03-15 19 views
9

Qualcuno può indicarmi la sintassi corretta da utilizzare per creare una tabella solo se attualmente non esiste nel database?Oracle Crea tabella se non esiste

Attualmente sto programmando una GUI Java per connettermi ad Oracle ed eseguire istruzioni sul mio database e mi chiedo se implementerei questo come un vincolo Java o un vincolo SQLPlus.

+0

Se si tenta di creare una tabella che non esiste, fallirà. Potresti intrappolare questo fallimento. Puoi anche provare a selezionare un record con quel nome di tabella da "USER_OBJECTS" o "USER_TABLES" e controllare i risultati. – Marc

+0

puoi farlo nel tuo codice java – Biswajit

risposta

7

Normalmente, non ha molto senso verificare se una tabella esiste o meno perché gli oggetti non dovrebbero essere creati in fase di esecuzione e l'applicazione dovrebbe sapere quali oggetti sono stati creati al momento dell'installazione. Se questo è parte dell'installazione, è necessario sapere quali oggetti esistono in qualsiasi punto del processo, quindi non è necessario controllare se esiste già una tabella.

Se avete veramente bisogno di, comunque,

  • È possibile tentare di creare la tabella e prendere l'ORA-00955 `:. Nome è già utilizzato da un oggetto esistente" eccezione
  • È possibile eseguire una query USER_TABLES (o ALL_TABLES o DBA_TABLES a seconda se si stanno creando oggetti di proprietà di altri utenti e privilegi nel database) per verificare se la tabella esiste già.
  • Si può provare a rilasciare la tabella prima di crearla e catturare il `ORA-00942: tabella o vista non esiste" eccezione se non lo fa.
+0

Grazie! Le linee guida del nostro progetto sono un po 'confuse, quindi volevo solo inserire un input su ciò che è tipico per un programma che funziona con i database. – raphnguyen

+0

come su tabelle temporanee? –

+1

@JawadLeWywadi - Nessuna differenza. Le tabelle temporanee sono oggetti permanenti, le creerai nello stesso momento in cui crei tabelle permanenti e allo stesso modo. Oracle non ha tabelle temporanee locali che verrebbero create e rilasciate in fase di runtime. –

1

Si può fare questo con la seguente procedura -

BEGIN 
    BEGIN 
     EXECUTE IMMEDIATE 'DROP TABLE <<Your Table Name>>'; 
    EXCEPTION 
     WHEN OTHERS THEN 
       IF SQLCODE != -942 THEN 
        RAISE; 
       END IF; 
    END; 

    EXECUTE IMMEDIATE '<<Your table creation Statement>>'; 

END; 

Spero che questo può aiutare.

+1

Sembra cancellare la tabella ogni volta. Quale procedura lo creerebbe se non esistesse, ma lasciandolo solo se lo fa? – Archie

0
try 
{ 
    // insert query for insert new record in your table 
} 
catch(Exception Ex) 
{ 
    //if it throw exception then catch it 

    int s=Ex.getErrorCode(); // check it for 903 error 

    //903 is table not existing error in oracle11g 

// then create your new table here otherwise if table present then record get stored in database 
} 
1

@Archie Vorrei rispondere alla tua domanda. @Piyas De Ci scusiamo per aver rubato il codice :).

Solo un piccolo aggiornamento di @Piyas De answer.

BEGIN 
    BEGIN 
     EXECUTE IMMEDIATE '<<Your table creation Statement>>'; 
    EXCEPTION 
     WHEN OTHERS THEN 
      IF SQLCODE == -955 THEN 
       RAISE; 
      END IF; 
    END; 
END;