2011-11-01 157 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'并检查你的表和序列是否已经存在。 –

相关问题