基于 SELECT 和 'WITH' 子句的视图

View based on SELECT with 'WITH' clause

我 select 有 'WITH' 子句:

with 
alias1 as (select...),
alias2 as (select ... from alias1),
alias3 as (select col1, col2 ... from alias2)
select col1,col2 from alias3 

我尝试使用以下方法创建视图:

create view ex_view as (
with 
alias1 as (select...),
alias2 as (select ... from alias1),
alias3 as (select col1, col2 ... from alias2)
select col1,col2 
from alias3
)

当我尝试执行这个创建语句时得到 'unsupported use of WITH clause'

如何根据我的 select 语句正确创建视图?

尝试去掉括号:

create view ex_view as
with 
    alias1 as (select...),
    alias2 as (select ... from alias1),
    alias3 as (select col1, col2 ... from alias2)
from alias3;

您不应该在查询两边加上括号;将其更改为:

create view ex_view as (
with 
alias1 as (select...),
alias2 as (select ... from alias1),
alias3 as (select col1, col2 ... from alias2)
select col1,col2 
from alias3
)

例如:

create view ex_view as
with 
alias1 as (select dummy from dual),
alias2 as (select dummy as col1, dummy as col2 from alias1),
alias3 as (select col1, col2 from alias2)
select col1,col2 
from alias3;

View ex_view created.

在查询周围使用括号的相同构造得到 ORA-32034:也不支持使用 WITH 子句。

如果您实际上没有在不止一个级别的查询中使用任何子查询 - 因此 'common table expression' 的 'common' 部分并不真正相关 - 您可以改用内联视图:

create view ex_view as
select alias3.col1, alias3.col2
from (
  select col1, col2
  from (
    select dummy as col1, dummy as col2
    from (
      select dummy from dual
    ) alias1
  ) alias2
) alias3;

但是 with 子句是有效的,而且通常更易于阅读和维护。

有没有办法创建带有 "WITH FUNCTION" 子句的视图。

CREATE OR REPLACE VIEW test$v AS 
    WITH
      FUNCTION with_function(p_id IN VARCHAR2) RETURN VARCHAR2 IS
      BEGIN
        RETURN p_id;
      END;
    SELECT with_function(dummy) AS dummy
    FROM   dual;
    /

这会产生一个错误:

ORA-06553: PLS-103: Encountered the symbol "end-of-file"