我们可以创建一个关于过程,函数,触发器,包的视图吗?

时间:2012-06-20 12:06:08

标签: sql oracle object view plsql

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

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

2 个答案:

答案 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())

但那不是观点:)