仮想列

仮想列は、テーブル内の1つまたは複数の既存の列に基づいている式です。仮想列ベースのパーティションを使用する場合は、テーブル内の仮想列には、ディスクスペースの使用率に利点を提供します。仮想列のみをメタデータとして保存されます。これは、物理的なスペースを消費しませんが、インデックスを作成することができます。仮想列には、オプティマイザ統計とヒストグラムが含まれています。 

仮想列を使用すると、派生列の使用を簡素化します。透過的に導出された値は、追加の値を計算し、挿入するためのアプリケーションを必要としません。また、これは、この機能の代替実装を提供するために、テーブルの上にトリガーを使用する必要性を防止します。テーブル内の仮想列を使用すると、派生列の値を表示するビューを使用する必要がなくなります。 

仮想列を持つ新しいテーブルには、次の構文を使用して誘導することができます。

テーブルを作成し、<テーブル名>(
   <COLUMN_NAME> <DATA_TYPE>、
   ...
   <COLUMN_NAME> [<DATA_TYPE>] [生成常に]として(<column_expression>)[仮想]
)。 

既存の表に仮想列を追加することは、以下のALTER TABLE構文を用いて達成されます。

ALTER TABLE <テーブル名>

((<column_expression>)[仮想]と[常に生成<COLUMN_NAME> [<DATA_TYPE>])を加えます。

表の仮想列を定義する場合、データ型を含むか、またはデータベースが式に基づいてデータ型を決定させるいずれかすることが可能です。 

必要に応じて、フレーズは、「常に生成」と「仮想」は、構文を明確にヘルプを使用することができます。列式は、同じテーブルで定義された列を参照する必要があります。関数はその作成中にDETERMINISTICを指定した場合しかし、列の式は、PL / SQLファンクションを参照することができます。   

たとえば、仮想列は、テーブルその店舗の従業員情報に役立つかもしれません。

SQL>表の従業員を作成する(  
2 EMPLOYEE_NAMEのVARCHAR2(30)、  
3 START_DATE日、  
4 END_DATE日付、  
(ANNUAL_SALARY / 2080)のように常に生成5 hourly_rate  
6 ANNUAL_SALARY数、  
他の7アクティブとして(END_DATEがnullは、次に場合'Y' 'N'末端))。

表が作成されました。

SQL>従業員への挿入  
2(EMPLOYEE_NAME、  
3 START_DATE、  
4 END_DATE、  
5 ANNUAL_SALARY)  
6つの値  
7( 'C. TESTER'、'01 -JAN-2011' 、NULL、100000)。

1行が作成されました。

SQL> SELECT * FROM EMPLOYEES  
2 /

ACTIVE EMPLOYEE_NAME START_DATE END_DATE HOURLY_RATE ANNUAL_SALARY
--------------- ---------- --------- ----------- ----- -------- ----------
C.は、01-JAN-11 48.0769231 100 000 Yをテスト

INSERT文は、このテーブルに新しいレコードを作成するために必要な唯一の4つの値が必要ですが、このテーブルのクエリは、すべての6つの値を表示します。これは、他の列に由来する2つの仮想列を含んでいます。時給仮想列は、年間2080労働時間で割った年俸の表現です。第二の仮想列表示従業員は、行の終了日を調べることによって、アクティブである場合。 

仮想列は、パーティション、インデックス、制約および外部キーのために使用することができます。しかし、仮想列は、索引構成、外部、オブジェクト、クラスタまたは一時テーブルには使用できません。

ORA-12996エラーを含む仮想列に関連するいくつかのエラーがあります。

OERRユーティリティ  ORA-12996エラーのために示し、この:

ORA-12996:システムで生成された仮想列を削除することはできません  

原因:試みは、システムによって生成された仮想列を削除しました。  

処置:なし

 

OCP試験の仮想colummnsについて:

どの2は、仮想列について本当ですか?

A.Theyは、更新またはdebete文のWHERE句で参照することができます。

B.Theyはへの列の名前としてUPDATE文のSET句で参照することができます

更新します。

C.Theyは、インデックスを作成することができます。

D.Theyは、データ型を明示的に指定することはできません。

E.Theyは別virtxial列の列式で参照することができます。

回答:AC

 

 

 

 

おすすめ

転載: www.cnblogs.com/liang-ning/p/12122895.html