Oracle Create Table如果不存在

时间:2013-03-15 16:03:02

标签: java database oracle10g sqlplus

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

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

4 个答案:

答案 0 :(得分:8)

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

但是,如果你真的需要,

  • 您可以尝试创建表并捕获`ORA-00955:名称已被现有对象使用“例外。
  • 您可以查询USER_TABLES(或ALL_TABLESDBA_TABLES,具体取决于您是创建其他用户拥有的对象以及您在数据库中的权限),以检查该表是否已经存在。
  • 您可以尝试在创建表之前删除该表,并捕获“ORA-00942:表或视图不存在”异常(如果不存在)。

答案 1 :(得分: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;

希望这可以帮助你。

答案 2 :(得分: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;

答案 3 :(得分: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
}