Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Oracle创建不存在的表_Java_Database_Oracle10g_Sqlplus - Fatal编程技术网

Java Oracle创建不存在的表

Java Oracle创建不存在的表,java,database,oracle10g,sqlplus,Java,Database,Oracle10g,Sqlplus,有人能告诉我,只有在数据库中当前不存在表时,才能使用正确的语法来创建表吗 我目前正在编写一个Java GUI,以便连接到Oracle并在我的数据库上执行语句,我想知道是将其实现为Java约束还是SQLPlus约束。通常,检查表是否存在没有多大意义,因为不应该在运行时创建对象,应用程序应该知道在安装时创建了哪些对象。如果这是安装的一部分,那么您应该知道在过程中的任何时候都存在哪些对象,因此不需要检查表是否已经存在 但是,如果你真的需要 您可以尝试创建表并捕获“ORA-00955:名称已被现有对象

有人能告诉我,只有在数据库中当前不存在表时,才能使用正确的语法来创建表吗


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

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

但是,如果你真的需要

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

您可以通过以下步骤执行此操作-

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;
开始
开始
执行立即“删除表”;
例外情况
当其他人
如果SQLCODE!=-那么
提高;
如果结束;
结束;
立即执行“”;
结束;

希望这能对你有所帮助。

@Archie我想回答你的问题。
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
}
@Piyas De抱歉偷了你的代码:)

只是@Piyas De answer的一点更新

BEGIN
    BEGIN
        EXECUTE IMMEDIATE '<<Your table creation Statement>>';
    EXCEPTION
        WHEN OTHERS THEN
            IF SQLCODE == -955 THEN
                RAISE;
            END IF;
    END;
END;
开始
开始
立即执行“”;
例外情况
当其他人
如果SQLCODE==-955,则
提高;
如果结束;
结束;
结束;

如果您试图创建一个不存在的表,它将失败。你可以抓住那次失败。您还可以尝试从
USER\u OBJECTS
USER\u TABLES
中选择具有该表名的记录,并检查结果。您可以在java代码中执行此操作谢谢!我们的项目指导方针有点混乱,所以我只想输入一个与数据库一起工作的程序的典型内容。临时表怎么样?@JawadLeWywadi-没有区别。临时表是永久对象,您可以在创建永久表的同时以相同的方式创建它们。Oracle没有在运行时创建和删除的本地临时表。这似乎每次都会删除该表。如果它不存在,什么过程会创建它,但如果它存在,则不进行创建?