在 with 子句中创建包含 pl/sql 定义的 mview
Posted
技术标签:
【中文标题】在 with 子句中创建包含 pl/sql 定义的 mview【英文标题】:creating mview containing pl/sql definitions in with clause 【发布时间】:2014-11-11 06:49:19 【问题描述】:创建mview时如何在with子句中使用pl sql定义?
举例说明会很有帮助。
我也尝试了以下查询,但遇到了一些错误。
create table tab1
(
fname varchar2(15) ,
lname varchar2(15)
);
create or replace type user_data_type as object (val1 varchar2(20),val2 varchar2(20));
/
CREATE OR REPLACE Function get_fname_lname(n in varchar2)
RETURN user_data_type as
name user_data_type;
cursor buffer_cur is
select fname,lname from tab1 where fname=n;
BEGIN
name := new user_data_type(null,null);
OPEN buffer_cur;
fetch buffer_cur into name.val1,name.val2;
close buffer_cur;
return name;
End;
/
select * from tab1;
select get_fname_lname(fname).val1 fname,get_fname_lname(fname).val2 from tab1;
drop materialized view mv1;
create materialized view mv1
with names as
(select get_fname_lname(fname).val1 fname,get_fname_lname(fname).val2 lname from tab1)
select fname,lname from names;
select * from mv1;
我看到了这个错误:
Error while creating mview:
ORA-00905: missing keyword
谁能指出可能是什么问题。
【问题讨论】:
【参考方案1】:您可以在创建视图时尝试类似的操作,因为 oracle 不支持递归视图。 通过使用 with 子句,您已经创建了一个内联视图,并且您正在尝试为该视图创建一个在 oracle 中不受支持的物化视图
create materialized view mv1
as
select fname,lname from
(select get_fname_lname(fname).val1 fname,get_fname_lname(fname).val2 lname
from tab1);
【讨论】:
谢谢。这有帮助..你能给我一些关于我的第一个问题的示例吗。 @starkk92 - 您想要创建物化视图的样本吗?创建视图时不应使用 with 子句,因为它会导致视图内视图以上是关于在 with 子句中创建包含 pl/sql 定义的 mview的主要内容,如果未能解决你的问题,请参考以下文章