2013-03-15 11 views
9

Czy ktoś może wskazać mi właściwą składnię do użycia w celu utworzenia tabeli tylko wtedy, gdy aktualnie nie istnieje w bazie danych?Oracle Utwórz tabelę, jeśli nie istnieje

Aktualnie programuję GUI Java w celu połączenia z Oracle i wykonania instrukcji w mojej bazie danych i zastanawiam się, czy zaimplementowałem to jako ograniczenie Java lub ograniczenie SQLPlus.

+0

Jeśli spróbujesz utworzyć tabelę, która nie istnieje, zawiedzie się. Możesz złapać tę porażkę. Możesz także spróbować wybrać rekord o tej nazwie tabeli z "USER_OBJECTS" lub "USER_TABLES" i sprawdzić wyniki. – Marc

+0

możesz to zrobić w swoim kodzie Java – Biswajit

Odpowiedz

7

Zazwyczaj nie ma większego sensu sprawdzanie, czy tabela istnieje, ponieważ obiekty nie powinny być tworzone w czasie wykonywania, a aplikacja powinna wiedzieć, jakie obiekty zostały utworzone podczas instalacji. Jeśli jest to część instalacji, powinieneś wiedzieć, jakie obiekty istnieją w dowolnym momencie procesu, więc nie musisz sprawdzać, czy tabela już istnieje.

Jeśli naprawdę trzeba jednak

  • Można próbować utworzyć tabelę i złapać `ORA-00955:. Nazwa jest już używana przez istniejącego obiektu wyjątku”
  • Można zapytać USER_TABLES (lub ALL_TABLES lub DBA_TABLES w zależności od tego, czy tworzysz obiekty posiadane przez innych użytkowników i uprawnienia w bazie danych), aby sprawdzić, czy tabela już istnieje.
  • Możesz spróbować upuścić tabelę przed jej utworzeniem i przechwycić `ORA-00942: tabela lub widok nie istnieje" excep jeśli nie.
+0

Dziękuję! Nasze wytyczne dotyczące projektu są nieco zakodowane, więc chciałem po prostu wejść w to, co jest typowe dla programu, który działa z bazami danych. – raphnguyen

+0

Co powiesz na tabele tymczasowe? –

+1

@JawadLeWywadi - Bez różnicy. Tabele tymczasowe są obiektami stałymi, można je tworzyć w tym samym czasie, w którym tworzy się stałe tabele i w ten sam sposób. Oracle nie ma lokalnych tabel tymczasowych, które zostałyby utworzone i usunięte w czasie wykonywania. –

1

Można to zrobić z następującą procedurą -

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; 

Nadzieja to może pomóc.

+1

To wydaje się usuwać tabelę za każdym razem. Jaka procedura by ją stworzyła, gdyby nie istniała, ale zostawiłaby to sama, gdyby tak się stało? – 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 Chciałbym odpowiedzieć na twoje pytanie. @Piyas De Przepraszamy za kradzież Twojego kodu :).

Tylko niewielka aktualizacja odpowiedzi @Piyas De.

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