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

Aは、または別ののview上に作成できます。が含まれているのは、の名前が異なるだけだからです。(aはデータのビューです)tableviewSynonymstableview

procedure,function,trigger,packageコード( )または。のビューを作成することはできませんsequence

特殊なケースはPIPELINED関数であるため、Glennが述べたように、データのセットを生成する構文は次のとおりです。

select something from TABLE(pipelined_function())

しかし、それはビューではありません:)

于 2012-06-20T12:14:08.593 に答える