仮想列は、テーブル内の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