2013-03-15 118 views
9

任何人都可以指向正確的語法,以便僅在數據庫中當前不存在的情況下才能創建表?Oracle創建表(如果它不存在)

我目前正在編程一個Java GUI,以便連接到Oracle並在我的數據庫上執行語句,我在想我是否會將其作爲Java約束或SQLPlus約束來實現。

+0

如果您嘗試創建一個不存在的表,它將會失敗。你可以捕捉失敗。您還可以嘗試從「USER_OBJECTS」或「USER_TABLES」中選擇具有該表名稱的記錄並檢查結果。 – Marc 2013-03-15 16:04:59

+0

你可以在你的java代碼中做到這一點 – Biswajit 2013-03-15 16:07:03

回答

7

通常,檢查表是否存在是沒有意義的,因爲不應該在運行時創建對象,應用程序應該知道在安裝時創建了哪些對象。如果這是安裝的一部分,那麼您應該知道過程中的任何時刻存在哪些對象,因此您不需要檢查表是否已經存在。

如果你真的需要,然而,

  • 您可以嘗試創建表,趕上'ORA-00955:名稱已被現有對象」異常
  • 您可以查詢(或者ALL_TABLESDBA_TABLES,具體取決於是否創建其他用戶擁有的對象和您在數據庫中的權限)來檢查表是否已經存在
  • 您可以嘗試在創建表之前刪除表並捕獲ORA-00942:表或視圖不存在「例外如果沒有的話。
+0

謝謝!我們的項目準則有點混亂,所以我只想輸入一個與數據庫一起工作的典型程序。 – raphnguyen 2013-03-15 16:23:36

+0

臨時表怎麼樣? – 2017-03-23 03:08:32

+1

@JawadLeWywadi - 沒有區別。臨時表是永久性對象,您可以在創建永久表的同時創建它們,方式相同。 Oracle沒有在運行時創建和刪除的本地臨時表。 – 2017-03-24 16:38:40

1

您可以通過以下步驟做到這一點 -

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; 

希望這可以幫助你。

+1

似乎每次都會刪除表格。如果它不存在,什麼程序可以創建它,但如果它存在則保留它? – Archie 2014-04-04 03:08:58

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我想回答你的問題。 @Piyas De對不起,竊取你的代碼:)。

只是@Piyas德答案的一點點更新。

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