私は 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 に入れることもできます (そしておそらく実際のシステムではそうするでしょう) ので、ビューもパッケージ関数に基づくことができます。
したがって、ビューを作成できるオブジェクトの (完全な?) リストは次のとおりです。
Aは、または別ののview
上に作成できます。が含まれているのは、の名前が異なるだけだからです。(aはデータのビューです)table
view
Synonyms
table
view
procedure,function,trigger,package
コード( )または。のビューを作成することはできませんsequence
。
特殊なケースはPIPELINED関数であるため、Glennが述べたように、データのセットを生成する構文は次のとおりです。
select something from TABLE(pipelined_function())
しかし、それはビューではありません:)