可以通过删除并重新创建视图,或者通过执行带有 OR REPLACE 子句的 CREATE VIEW 语句实现替换现有视图的定义。
要替换视图,您必须拥有删除和创建视图所需的所有权限。如果视图的 SELECT 定义必须修改,可以优先考虑使用带有 OR REPLACE 子句的 CREATE VIEW 语句执行视图替换,其他拥有关系、权限和非 SELECT 规则在内的视图属性不会被更改; 视图不能使用 ALTER VIEW 语句更改 SELECT 定义。
替换视图的方式具体如下:
• 1. 您可以直接删除并重新创建视图。
• 2. 可以使用包含 OR REPLACE 子句的 CREATE VIEW 语句重新定义视图。OR REPLACE 子句会替换当前
定义的视图,并保留当前授权。
例如,在前面小节所示创建的 student_age_view 视图,如果需要重新定义视图 WHERE 子句指定的年龄和性别以及新增查询结果。可以使用以下语句替换 student_age_view 视图为当前定义:
CREATE OR REPLACE VIEW student_age_view AS
SELECT student_id, student_name, age
FROM student
WHERE age > 19 and gender = '女'
WITH LOCAL CHECK OPTION;
在替换视图之前,请注意到可能出现的影响:
• 替换一个视图将替换数据字典中的视图定义。视图引用的所有基础对象都不受影响。
• 如果 CHECK OPTION 中不再指定 LOCAL 关键字,则将会根据当前新视图和所有基视图条件检查新数据。