【发布时间】:2020-01-11 02:57:24
【问题描述】:
我是 Oracle 数据库系统的新手。 Oracle 12c 中以下 SQL 语句的等价物是什么?
DROP VIEW IF EXIST <view_name>
【问题讨论】:
我是 Oracle 数据库系统的新手。 Oracle 12c 中以下 SQL 语句的等价物是什么?
DROP VIEW IF EXIST <view_name>
【问题讨论】:
除了简单地调用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; /
【讨论】:
您所写的内容在 12c 中运行没有任何问题。此外,您可以简单地使用,
DROP VIEW <VIEW_NAME>;
【讨论】:
您可以通过过程执行某些操作,但是当您可以运行 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;
/
【讨论】:
DROP VIEW 需要是动态 SQL。
您确定要 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 语句。通常不需要先尝试删除视图。
如果视图是一个过时的对象并且您想永久删除,您只想删除它,但在这种情况下,您会知道该视图存在,因此将其删除没有多大意义先检查是否存在。
【讨论】: