如果 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创建表之前判断表是不是存在,如果存在则删除已有表