oracle 12c视图中的隐形列

时间:2015-06-24 15:24:31

标签: oracle12c

Oracle 1Z0-047 sql专家考试的主题之一是“使用可见/不可见列创建简单和复杂的视图”。我可以使用不可见的列创建表,我可以创建一个包含这些不可见列的视图,但是我找不到使这些列在结果视图中不可见的语法。 Oracle文档在数据库SQL语言参考"Create View"页面中提到了可见/不可见,但未给出具体示例,我尝试跟踪其波浪形图失败:

create or replace view jl_book_author as  
    select title, b.isbn isbn invisible, lname, fname  
        from jl_books b  
            join jl_bookauthor a on b.isbn = a.isbn  
            join jl_author r on a.authorid = r.authorid  
         order by title, lname, fname;  
ERROR at line 3:
ORA-00923: FROM keyword not found where expected

任何想法如何使视图的列不可见,除了通过考试之外我为什么要这样做呢?

2 个答案:

答案 0 :(得分:3)

这很有效。指定"INVISIBLE"的唯一方法是,如果您在视图中使用列别名。别名,约束和INVISIBLE/VISIBLE修饰符需要在视图名称和关键字" AS"之间的括号中。

create or replace view jl_book_author (tl, bn INVISIBLE, al, af) as  
    select title, b.isbn, lname, fname  
        from jl_books b  
            join jl_bookauthor a on b.isbn = a.isbn  
            join jl_author r on a.authorid = r.authorid  
         order by title, lname, fname;  

答案 1 :(得分:1)

  

“为什么除了通过考试之外我还想做这个?”

如Oracle SQL Reference CREATE TABLE中所述,您可以使用INVISIBLE子句向任何表添加列,而不会将包含通配符SELECT *语句的代码随意添加到其中。

因此,对于您希望 legacy 代码随意操作的表添加列非常有用。

有关更全面的解释和示例,请参阅Oracle杂志 MAY / JUNE 2014 版本中的文章ASK TOM: technology