如果 Oracle SQL 中存在则删除视图 [重复]

Posted

技术标签:

【中文标题】如果 Oracle SQL 中存在则删除视图 [重复]【英文标题】:Drop view if exists in Oracle SQL [duplicate] 【发布时间】:2020-01-11 02:57:24 【问题描述】:

我是 Oracle 数据库系统的新手。 Oracle 12c 中以下 SQL 语句的等价物是什么?

DROP VIEW IF EXIST <view_name>

【问题讨论】:

【参考方案1】:

除了简单地调用DROP VIEW,你还可以写a procedure来检查之前:

BEGIN
 FOR i IN (SELECT null FROM user_views WHERE view_name = 'BOOKS_emp') LOOP
   EXECUTE IMMEDIATE 'DROP VIEW books_emp';
 END LOOP;
END;
/

【讨论】:

【参考方案2】:

您所写的内容在 12c 中运行没有任何问题。此外,您可以简单地使用,

DROP VIEW <VIEW_NAME>;

【讨论】:

【参考方案3】:

您可以通过过程执行某些操作,但是当您可以运行 drop view viewname 时,您的查询是无关紧要的。它可以直接告诉你它是否存在。

  Create or Replace Procedure
      dropifexists(viewname IN
         varchar(50))
      AS
          Declare
          flag number(10);

      Begin
          SELECT count(*) into flag FROM
              user_views
              WHERE view_name = viewname;

          If(flag>0)
              Drop View viewname;
          Else
             dbms_output.putline('View already
             exists')
          End if;
      End;
      /

而且,一旦创建,您就可以调用相同的过程:

   begin
       dropifexists('viewname' ) ;
   end;
   /

【讨论】:

您可能还想解释如何使用它.. 是的@Raymond 我添加了代码来调用该过程。谢谢! DROP VIEW 需要是动态 SQL。【参考方案4】:

您确定要 1:1 替换此功能吗?通常,您会在 SQL Server 中使用DROP VIEW IF EXISTS,因为直到最近,SQL Server 还没有CREATE OR ALTER VIEW 选项。因此,如果视图存在,您的促销脚本会删除该视图,然后有一个 CREATE VIEW 语句,这样它就可以运行多次而不会出现问题。

Oracle 一直(嗯,至少在过去几十年)支持CREATE OR REPLACE VIEW 语句,因此您的 Oracle 脚本通常只包含 CREATE OR REPLACE VIEW 语句。通常不需要先尝试删除视图。

如果视图是一个过时的对象并且您想永久删除,您只想删除它,但在这种情况下,您会知道该视图存在,因此将其删除没有多大意义先检查是否存在。

【讨论】:

以上是关于如果 Oracle SQL 中存在则删除视图 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果存在则删除表 Oracle,SQL Developer [重复]

oracle 索引存在则删除

oracle创建表之前判断表是不是存在,如果存在则删除已有表

oracle创建表之前判断表是不是存在,如果存在则删除已有表

在oracle数据库中,想要删除一个用户,但是报递归SQL级别1出现错误,表或视图不存在,请问有办法解决吗?

SQL实战新手入门:删除视图