当前位置: 首页 > 面试题库 >

创建表(如果尚不存在)

南门欣怡
2023-03-14
问题内容

我正在尝试创建表(如果尚不存在)。我目前正在检查它是否首先存在,DBA_TABLES并且该查询是否不返回任何内容,然后插入。有没有一种方法可以只检查同一条语句,因此我不必将其分解为单独的查询?

这就是我目前所拥有的。

BEGIN
    SELECT COUNT(*)
    INTO lvnTableExists
    FROM DBA_TABLES
    WHERE Table_Name = 'SOME_TABLE';

    IF lvnTableExists = 0 THEN
        EXECUTE IMMEDIATE 'CREATE TABLE SOME_TABLE AS (SELECT * FR0M OTHER_TABLE)';
    END IF;
END;

这是我要的东西。

DECLARE
    sql VARCHAR2(100000);
BEGIN
    sql := 'CREATE TABLE SOME_TABLE ' ||
            'AS (SELECT * FROM OTHER_TABLE) ' ||
            'WHERE NOT EXISTS (SELECT NULL ' ||
            'FROM DBA_OBJECTS d WHERE d.Object_Name = 'SOME_TABLE' AND ' ||
            'd.Owner = 'SOME_TABLE')';
    EXECUTE IMMEDIATE sql;
END;

问题是,您不能WHERE NOT EXISTSCREATE TABLE AS语句中添加一个。


问题答案:

是的,Oracle没有该功能真是可惜。我敢肯定会有一天。在此之前,如果您想编写一个PL / SQL包装器,为什么不那样做:

DEClARE
     table_exists_already exception; 
     pragma exception_init(table_exists_already, -955 ); 
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE SOMETABLE...';
EXCEPTION WHEN table_exists_already THEN
  DBMS_OUTPUT.PUT_LINE('Table sometable already exists');
END;
/


 类似资料:
  • 问题内容: 我想检查是否存在存储过程列表。我希望所有这些都在1个脚本中一个接一个地完成。到目前为止,我有这种格式: 等等。但是,出现以下错误: 关键字“过程”附近的语法不正确。 为什么我的工作不正常? 问题答案: 必须是批处理中的第一个语句。我通常会这样: (不要忘记授予声明,因为如果您重新创建proc,它们将会丢失) 部署存储过程时要考虑的另一件事是,删除可以成功而创建失败。出现问题时,我总是使

  • 问题内容: 在使用Bluehost进行WordPress安装时,我遇到了一些情况,由于没有上传文件夹,我的WordPress主题遇到了错误。 显然,尽管HostGator可以,Bluehost cPanel WordPress安装程序不会创建此文件夹。 因此,我需要向主题添加代码,以检查文件夹并以其他方式创建该文件夹。 问题答案: 尝试这个: 请注意,这已经是目录的默认模式,并且仍可以被当前的um

  • 问题内容: 我很沮丧,我不知道该怎么做。 基本上,我只想创建一个表,但是如果它存在,则需要将其删除并重新创建,而不是将其截断,但是如果不存在,则可以创建它。 有人可以帮忙吗? 谢谢乔治 问题答案: 放在tablename您的发言之前。 该语句将删除该表(如果存在),但如果不存在则不会引发错误。

  • 问题内容: 任何人都可以指出我仅在数据库中当前不存在表时才能使用的正确语法吗? 我目前正在编程Java GUI,以便连接到Oracle并在数据库上执行语句,我想知道是否将其实现为Java约束还是SQLPlus约束。 问题答案: 通常,检查表是否存在没有多大意义,因为不应在运行时创建对象,而应用程序应知道在安装时创建了哪些对象。如果这是安装的一部分,那么您应该知道过程中任何时候存在哪些对象,因此您无

  • 问题内容: 您可以给MS Access等同于MySQL“如果不存在则创建表…”吗? 更新 像这样 也将是合适的 问题答案: 对于SQL DDL代码,答案是否定的。ACE / Jet SQL没有任何流控制语法,并且ACE / Jet只能执行一个SQL语句。是的,没错:ACE / Jet不支持程序代码:(

  • 问题内容: 我正在使用PostgreSQL,并且是SQL的初学者。我正在尝试从查询创建表,并且如果运行: 它工作正常。但是然后如果我添加“如果不存在”并运行: 使用完全相同的查询,我得到: 有什么办法吗? 问题答案: CREATE TABLE AS被认为是与普通CREATE TABLE 分开的语句,并且 直到Postgres版本9.5 (请参阅changelog条目)不支持子句 为止 。(请务必查