9

只有当数据库中当前不存在表时,任何人都可以指出要使用的正确语法来创建表吗?

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

4

4 回答 4

7

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

但是,如果你真的需要,

  • 您可以尝试创建表并捕获“ORA-00955:名称已被现有对象使用”异常。
  • 您可以查询USER_TABLES(或ALL_TABLES根据DBA_TABLES您是否正在创建其他用户拥有的对象以及您在数据库中的权限)来检查表是否已经存在。
  • 您可以尝试在创建表之前删除它,如果不存在,则捕获“ORA-00942:表或视图不存在”异常。
于 2013-03-15T16:09:05.800 回答
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;

希望这可以帮助你。

于 2013-03-15T16:27:44.533 回答
1

@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;
于 2016-04-21T15:02:48.607 回答
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
}
于 2013-03-15T16:35:33.567 回答