我是 SQL 新手,正在经历一些视图分配。我对以下观点有一些疑问:
我们可以创建关于过程、函数、触发器、包或序列、索引、同义词的视图吗?如果是,那怎么办?
这是一个基于 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 中,因此视图也可以基于一个包函数。
因此,您可以创建视图的(完整?)对象列表是:
Aview
可以在 atable
或另一个上创建view
。Synonyms
包括在内,因为它们只是 a 的不同名称table
。(aview
是数据视图)
您不能通过代码 ( procedure,function,trigger,package
) 或sequence
.
作为特例是流水线函数,正如格伦所说,它产生一组数据,语法是:
select something from TABLE(pipelined_function())
但这不是一个观点:)