如果表不存在则创建表,如果在Oracle中不存在则创建序列

时间:2011-11-01 17:47:26

标签: sql 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;

类似这样的查询也将用于序列 -

Create sequence test_sequence if doesn't exist

2 个答案:

答案 0 :(得分: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查找现有序列并对其进行调整以适应。

答案 1 :(得分:2)

没有这样的选择。

你唯一能做的就是继续创建表和序列,然后忽略“table already exists”错误。