我是SQL的新手,经历了一些视图分配。 我对以下观点有一些疑问:
我们可以创建一个关于过程,函数,触发器,包或序列,索引,同义词的视图吗? 如果是,那怎么样?
答案 0 :(得分:4)
以下是基于FUNCTION的视图示例(注意:不是PIPELINED函数,尽管它本来可以):
create or replace type dept_t is object (deptno number, dname varchar2(10));
create or replace type dept_tab_t is table of dept_t;
create or replace function depts_fun
return dept_tab_t
is
l_dept_tab dept_tab_t := dept_tab_t();
begin
for r in (select deptno, dname from dept)
loop
l_dept_tab.extend;
l_dept_tab(l_dept_tab.count) := dept_t(r.deptno, r.dname);
end loop;
return l_dept_tab;
end;
/
create view depts_view as
select * from table (depts_fun);
select * from depts_view;
我并不是说它有用或做得好,只是有可能!
当然,我可以(并且可能在真实系统中)将该函数放入PACKAGE中,因此视图也可以基于包函数。
那么你可以创建视图的(完整的?)对象列表是:
答案 1 :(得分:1)
可以在view
或其他table
上创建view
。包含Synonyms
是因为它们只是table
的不同名称。 (view
是数据)的视图
您无法创建代码(procedure,function,trigger,package
)或sequence
的视图。
特殊情况是PIPELINED functions,正如格伦所说,它产生了一组数据,语法是:
select something from TABLE(pipelined_function())
但那不是观点:)