2013-03-15 117 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; 
相关问题