视图会影响 ALTER TABLE 命令吗?

m-s*_*ith 3 oracle view alter-table upgrade

我为许多客户提供了一个数据库系统。该数据库本地安装在 Oracle 上。

随着产品的增长,我们会定期升级数据库结构(添加新字段、重命名旧字段、更改内容)。

我的一位客户希望将他们自己的自定义视图添加到数据库中。他们向我保证,他们会将视图添加到实时模式的不同模式中。但是,我担心包含视图可能会影响未来的升级脚本。

如果视图引用了要更改的表,视图的存在是否会阻止表被更改?

Yas*_*irA 7

不,它不应该阻止表被更改。但是,如果您删除视图所依赖的基础表,或者更改/删除视图使用的表中的列,则视图可能会变得无效。您可以使用以下查询检查系统中哪些视图无效:

sql> select name from dba_objects where object_type = 'VIEW' and status = 'INVALID';
Run Code Online (Sandbox Code Playgroud)

您应该在创建视图之前解决问题VALID。该视图可以手动编译:

sql> alter view foo compile;
Run Code Online (Sandbox Code Playgroud)

或者您可以允许系统在有人尝试查询视图时自动编译它。然而,手动编译是推荐的方式,因为它减少了第一次查询的执行时间。通常使用提供的脚本批量重新编译视图和其他无效对象(过程、触发器等)utlrp,这是 DBA 的例行任务。

如果要创建视图但基表尚不存在,则可以使用选项FORCE

sql> create force view foo as select * from moo;
Run Code Online (Sandbox Code Playgroud)