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

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

DROP VIEW IF EXIST <view_name>

【问题讨论】:

    标签: sql oracle oracle12c


    【解决方案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 语句。通常不需要先尝试删除视图。

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

        【讨论】:

          猜你喜欢
          • 2020-09-26
          • 2016-07-08
          • 1970-01-01
          • 2014-05-17
          • 1970-01-01
          • 2013-11-16
          • 2011-04-30
          • 1970-01-01
          相关资源
          最近更新 更多