2011-11-01 118 views
3

我想創建一個下面的表,如果它不存在。創建一個表,如果它不存在,並創建一個序列,如果它不存在於Oracle

create table TEST (
       id number NOT NULL PRIMARY KEY, 
       url varchar(1000) NOT NULL, 
       urlHash varchar(255) NOT NULL, 
       contentHash varchar(255), 
       modDate varchar(30), 
       contentLocation varchar(100), 
       status integer, 
       lastCrawlDate varchar(30)) ; 

所以我的問題是一樣的東西這個 -

Create Table TEST if doesn't exist 

以同樣的方式進行序列 -

create sequence test_seq start with 1 increment by 1 nomaxvalue; 

事情是這樣的查詢將是序列too-

Create sequence test_sequence if doesn't exist 

回答

10

你可以做一個匿名PL/SQL塊:

DECLARE 
    t_count INTEGER; 
    v_sql VARCHAR2(1000) := 'create table TEST (
      id number NOT NULL PRIMARY KEY, 
      url varchar(1000) NOT NULL, 
      urlHash varchar(255) NOT NULL, 
      contentHash varchar(255), 
      modDate varchar(30), 
      contentLocation varchar(100), 
      status integer, 
      lastCrawlDate varchar(30))'; 
BEGIN 
    SELECT COUNT(*) 
    INTO t_count 
    FROM user_tables 
    WHERE table_name = 'TEST'; 

    IF t_count = 0 THEN 
    EXECUTE IMMEDIATE v_sql; 
    END IF; 
END; 
/

同樣,你可以使用USER_SEQUENCES尋找一個現有的序列和適應這種適應。

+0

非常感謝你, – MirlvsMaximvs

2

沒有這樣的 選項。

你唯一能做的就是繼續創建表和序列,並簡單地忽略「表已存在」錯誤。

+0

我的應用程序所做的是 - 當您第一次運行它時,它將創建表並創建序列。之後,它繼續向oracle數據庫中插入一些值。但是當我第二次再次運行該應用程序時。然後我會得到'table already exists'錯誤,所以如果我在同一張表上再次插入,它將不會產生任何影響。我唯一會遇到的是表已經存在的錯誤。這是對的? – ferhan

+0

正確。如果你想避免這個錯誤,你可以查詢系統視圖'ALL_TABLES'和'ALL_SEQUENCES'並檢查你的表和序列是否已經存在。 –

相關問題