0

我是 SQL 新手,正在经历一些视图分配。我对以下观点有一些疑问:

我们可以创建关于过程、函数、触发器、包或序列、索引、同义词的视图吗?如果是,那怎么办?

4

2 回答 2

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 中,因此视图也可以基于一个包函数。

因此,您可以创建视图的(完整?)对象列表是:

  • 意见
  • 同义词
  • 物化视图
  • 返回表类型的独立函数
  • 封装返回表类型的函数
于 2012-06-20T15:15:15.237 回答
1

Aview可以在 atable或另一个上创建viewSynonyms包括在内,因为它们只是 a 的不同名称table。(aview数据视图)

您不能通过代码 ( procedure,function,trigger,package) 或sequence.

作为特例是流水线函数,正如格伦所说,它产生一组数据,语法是:

select something from TABLE(pipelined_function())

但这不是一个观点:)

于 2012-06-20T12:14:08.593 回答