【问题标题】:Oracle Create Table if it does not existOracle 创建表,如果它不存在
【发布时间】:2016-04-21 23:02:48
【问题描述】:

谁能指出我要使用的正确语法,以便仅当数据库中当前不存在表时才创建表?

我目前正在编写一个 Java GUI 以连接到 Oracle 并在我的数据库上执行语句,我想知道我是否会将其实现为 Java 约束或 SQLPlus 约束。

【问题讨论】:

  • 如果您尝试创建一个不存在的表,它将失败。您可以捕获该失败。您也可以尝试从USER_OBJECTSUSER_TABLES 中选择具有该表名的记录并检查结果。
  • 你可以在你的java代码中做到这一点

标签: java database oracle10g sqlplus


【解决方案1】:

通常,检查表是否存在没有多大意义,因为不应该在运行时创建对象,并且应用程序应该知道在安装时创建了哪些对象。如果这是安装的一部分,您应该知道在该过程中的任何时候存在哪些对象,因此您不需要检查表是否已经存在。

如果你真的需要,

  • 您可以尝试创建表并捕获“ORA-00955: name is already used by an existing object”异常。
  • 您可以查询USER_TABLES(或ALL_TABLESDBA_TABLES,具体取决于您是否正在创建其他用户拥有的对象以及您在数据库中的权限)以检查该表是否已存在。
  • 您可以尝试在创建表之前将其删除,如果不存在,则捕获“ORA-00942:表或视图不存在”异常。

【讨论】:

  • 谢谢!我们的项目指南有些混乱,所以我只想输入有关使用数据库的程序的典型特征。
  • 临时表怎么样?
  • @JawadLeWywadi - 没有区别。临时表是永久对象,您可以在创建永久表的同时以相同的方式创建它们。 Oracle 没有将在运行时创建和删除的本地临时表。
【解决方案2】:

您可以使用以下程序来做到这一点 -

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;

希望对您有所帮助。

【讨论】:

  • 这似乎每次都删除表。如果它不存在,什么程序会创建它,但如果它存在则不管它?
【解决方案3】:

@Archie 我想回答你的问题。 @Piyas De 很抱歉窃取了您的代码 :)。

只是对@Piyas De 答案的一点更新。

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

【讨论】:

    【解决方案4】:
    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-07
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 2014-07-20
      • 2023-03-22
      相关资源
      最近更新 更多