5.7 二面性ビューに関する情報の取得
静的データ・ディクショナリ・ビューを使用して、二面性ビュー、その基礎となる表、列およびキー列リンクに関する情報を取得できます。二面性ビューのJSONスキーマの説明を取得することもできます。これには、サポートされるJSONドキュメントの構造およびJSON言語タイプの説明が含まれています。
JSON二面性ビューの静的ディクショナリ・ビュー
既存の二面性ビューに関する情報を取得するには、静的データ・ディクショナリ・ビューDBA_JSON_DUALITY_VIEWS
、USER_JSON_DUALITY_VIEWS
およびALL_JSON_DUALITY_VIEWS
を確認します。脚注1これらの各ディクショナリ・ビューには、各二面性ビューについて次のものが含まれています:
-
ビュー名および所有者
-
JSON
型の列の名前 -
ルート表名および所有者
-
挿入、削除および更新の各操作をビューで許可するかどうか
-
ビューが読取り専用かどうか
-
JSON列を記述するJSONスキーマ
-
ビューが有効かどうか
-
ビューが論理レプリケーションに対して有効かどうか。
ディクショナリ・ビューDBA_JSON_DUALITY_VIEW_TABS
、USER_JSON_DUALITY_VIEW_TABS
およびALL_JSON_DUALITY_VIEW_TABS
を使用して、二面性ビューの基礎となる表をリストできます。これらの各ディクショナリ・ビューには、二面性ビューについて次のものが含まれています:
-
ビュー名および所有者
-
表名および所有者
-
挿入、削除および更新の各操作を表で許可するかどうか
-
表が読取り専用かどうか
-
表にフレックス列があるかどうか
-
表がビューのルート表かどうか
-
二面性ビューの表を識別する番号
-
ビュー内の親表を識別する番号
-
表とその親表との関係: 親内でネストされているか、外部結合または内部結合のターゲットであるか
ディクショナリ・ビューDBA_JSON_DUALITY_VIEW_TAB_COLS
、USER_JSON_DUALITY_VIEW_TAB_COLS
およびALL_JSON_DUALITY_VIEW_TAB_COLS
を使用して、二面性ビューの基礎となる表の列をリストできます。これらの各ディクショナリ・ビューには、ビューと表の名前と所有者、その表がルート表かどうか、そのビュー内の表を識別する番号、および表内の各列に関する次の情報が含まれています:
-
列名、データ型および最大文字数(文字データ型の場合)
-
JSONキー名
-
挿入、削除および更新の各操作を列で許可するかどうか
-
列が読取り専用かどうか
-
列がフレックス列かどうか
-
列が生成されるかどうか。
-
列が非表示かどうか。
-
識別列の指定におけるその列の位置(それが識別列である場合)
-
ETAG指定内の列の位置(該当する場合)
-
二面性ビュー定義内のファンクション
json_arrayagg
(または同等)のコールのORDER BY
句内の列の位置(該当する場合)
ディクショナリ・ビューDBA_JSON_DUALITY_VIEW_LINKS
、USER_JSON_DUALITY_VIEW_LINKS
およびALL_JSON_DUALITY_VIEW_LINKS
を使用して、二面性ビューに関連付けられたリンクをリストできます。リンクは、識別列から他の列に対してです。これらの各ディクショナリ・ビューには、リンクごとに次のものが含まれています:
-
ビューの名前と所有者
-
リンクの親表の名前と所有者
-
リンクの子表の名前と所有者
-
リンクの開始列と終了列の名前
-
リンクの結合タイプ: ネストまたは外部
-
リンクに関連付けられたJSONキーの名前
関連項目:
『Oracle Databaseリファレンス』の静的データ・ディクショナリ・ビューに関する項
JSONリレーショナル二面性ビューのJSONの説明
JSONスキーマでは、JSONデータの構造およびJSON言語タイプを指定します。これは、JSONドキュメントの既存のセットのサマリーの説明として機能するか、JSONドキュメントのセットで想定される内容または許可される内容の指定として機能します。以前のユースケースは、JSONデータ・ガイドから取得したスキーマのユースケースです。後者のユースケースには、二面性ビューでサポートされるドキュメントを説明するJSONスキーマのケースが含まれています。
PL/SQLファンクションDBMS_JSON_SCHEMA.describe
を使用して、二面性ビューでサポートされるJSONドキュメントを説明するJSONスキーマを取得できます。(このドキュメントは、静的ディクショナリ・ビューDBA_JSON_DUALITY_VIEWS
、USER_JSON_DUALITY_VIEWS
およびALL_JSON_DUALITY_VIEWS
の列JSON_SCHEMA
でも使用できます。「JSON二面性ビューの静的ディクショナリ・ビュー」を参照してください。)
このJSONスキーマには、次の3種類の情報が含まれています:
-
ドキュメントをサポートする二面性ビューに関する情報
これには、ビューを所有するデータベース・スキーマ(ユーザー) (フィールド
dbObject
)およびビューで許可される操作(フィールドdbObjectProperties
)が含まれます。 -
二面性ビューの基礎となる表の列に関する情報。
これには、ドメイン名(フィールド
dbDomain
)、識別列に対応するフィールド(フィールドdbPrimaryKey
)、外部キー列に対応するフィールド(フィールドdbForeignKey
)、フレックス列が存在するかどうか(フィールドadditionalProperties
)、列データ型の制限(文字列の場合はフィールドmaxLength
、数値の場合はフィールドsqlPrecision
など)が含まれます。 -
ドキュメントの許可された構造およびJSON言語のタイプに関する情報
この情報を使用して、ビューに追加または変更するデータを検証できます。これは上位レベルのスキーマフィールド
properties
の値として使用でき、独自の権限でJSONスキーマとして使用できます。
例5-22では、DBMS_JSON_SCHEMA.describe
を使用して、カーレースの例の各二面性ビュー(driver_dv
、race_dv
およびteam_dv
)を説明します。
例5-22 DBMS_JSON_SCHEMA.DESCRIBEを使用した、二面性ビューを記述するJSONスキーマの表示
この例では、各カーレースの二面性ビューについて、ビューでサポートされるJSONドキュメントを記述するJSONスキーマを示します。
上位レベルのJSONスキーマ・フィールドproperties
の値は、ビューに追加またはビューで変更されるデータを検証するために使用できるJSONスキーマです。もう1つの上位レベルのプロパティでは、ドキュメントをサポートする二面性ビューについて記述します。
各ビューを作成して所有するデータベース・スキーマ/ユーザーは、ここでプレースホルダ値とともに表示されます(イタリック
で表示されます)。これはフィールドdbObject
の値に反映されます。二面性ビューの場合、これはビュー所有者のデータベース・スキーマ名で修飾されるビュー名です。たとえば、データベース・ユーザー/スキーマteam_dv_owner
が二面性ビューteam_dv
を作成した場合、そのビューのフィールドdbObject
の値はteam_dv_owner.team_dv
になります。
(もちろん、同じデータベース・ユーザー/スキーマがこれらの二面性ビューを作成し、所有できます。ただし、その必要はありません。)
配列フィールドdbObjectProperties
は、二面性ビュー自体で許可される操作を指定します。
-
check
は、各ドキュメント内の少なくとも1つのフィールドがCHECK
とマークされ、ETAGの計算に関与することを意味します。 -
delete
は、既存のドキュメントをビューから削除できることを意味します。 -
insert
は、ビューにドキュメントを挿入できることを意味します。 -
update
は、ビュー内の既存のドキュメントを更新できることを意味します。
フィールドtype
は、標準のJSON言語非スカラー型(object
またはarray
)を指定します。両方のフィールドtype
およびextendedType
は、スカラーJSON言語型の指定に使用します。
ネイティブ・バイナリJSONデータ(OSON形式)は、SQLデータ型に対応していてJSON標準には含まれていないスカラー型(dateなど)を追加することでJSON言語を拡張します。これらのOracle固有のスカラー型は、常にextendedType
で指定されます。
フィールドitems
は、配列値の要素タイプを指定します。サポートされているドキュメント内の各JSONオブジェクトのフィールドは、そのオブジェクトのスキーマ・フィールドproperties
の下にリストされます。すべてのドキュメント・フィールドは下線が付いています
。
(JSONスキーマを作成するために必要なものは、ファンクションDBMS_JSON_SCHEMA.describe
のみです。ここでの使用方法は、キーワードPRETTY
を渡すために、SQL/JSONファンクションjson_serialize
でラップされています。これにより、整形出力されます。)
-- Duality View TEAM_DV
SELECT json_serialize(DBMS_JSON_SCHEMA.describe('TEAM_DV') PRETTY)
AS team_dv_json_schema;
TEAM_DV_JSON_SCHEMA
-------------------
{"title" : "TEAM_DV",
"dbObject" : "TEAM_DV_OWNER.TEAM_DV",
"dbObjectType" : "dualityView",
"dbObjectProperties" : [ "insert", "update", "delete", "check" ],
"type" : "object",
"properties" : {"_id" :
{"extendedType" : "number",
"sqlScale" : 0,
"generated" : true,
"dbFieldProperties" : [ "check" ]},
"_metadata" : {"etag" : {"extendedType" : "string",
"maxLength" : 200},
"asof" : {"extendedType" : "string",
"maxLength" : 20}},
"dbPrimaryKey" : [ "_id" ],
"name" : {"extendedType" : "string",
"maxLength" : 255,
"dbFieldProperties" : [ "update",
"check" ]},
"points" : {"extendedType" : "number",
"sqlScale" : 0,
"dbFieldProperties" : [ "update",
"check" ]},
"driver" :
{"type" : "array",
"items" :
{"type" : "object",
"properties" :
{"dbPrimaryKey" : [ "driverId" ],
"name :
{"extendedType" : "string",
"maxLength" : 255,
"dbFieldProperties" : [ "update", "check" ]},
"points" :
{"extendedType" : "number",
"sqlScale" : 0,
"dbFieldProperties" : [ "update" ]},
"driverId" : {"extendedType" : "number",
"sqlScale" : 0,
"generated" : true,
"dbFieldProperties" : [ "check" ]}},
"required" : [ "name",
"points",
"driverId" ],
"additionalProperties" : false}}},
"required" : [ "name", "points", "_id" ],
"additionalProperties" : false}
1 row selected.
-- Duality View DRIVER_DV
SELECT json_serialize(DBMS_JSON_SCHEMA.describe('DRIVER_DV') PRETTY)
AS driver_dv_json_schema;
DRIVER_DV_JSON_SCHEMA
---------------------
{"title" : "DRIVER_DV",
"dbObject" : "DRIVER_DV_OWNER.DRIVER_DV",
"dbObjectType" : "dualityView",
"dbObjectProperties" : [ "insert", "update", "delete", "check" ],
"type" : "object",
"properties" : {"_id" : {"extendedType" : "number",
"sqlScale" : 0,
"generated" : true,
"dbFieldProperties" : [ "check" ]},
"_metadata" : {"etag" : {"extendedType" : "string",
"maxLength" : 200},
"asof" : {"extendedType" : "string",
"maxLength" : 20}},
"dbPrimaryKey" : [ "_id" ],
"name" : {"extendedType" : "string",
"maxLength" : 255,
"dbFieldProperties" : [ "update", "check" ]},
"points" : {"extendedType" : "number",
"sqlScale" : 0,
"dbFieldProperties" : [ "update", "check" ]},
"team" : {"extendedType" : "string",
"maxLength" : 255},
"teamId" : {"extendedType" : "number",
"sqlScale" : 0,
"generated" : true,
"dbFieldProperties" : [ "check" ]},
"race" : {"type" : "array",
"items" :
{"type" : "object",
"properties" :
{"dbPrimaryKey" : [ "driverRaceMapId" ],
"finalPosition" :
{"extendedType" : [ "number",
"null" ],
"sqlScale" : 0,
"dbFieldProperties" : [ "update",
"check" ]},
"driverRaceMapId" :
{"extendedType" : "number",
"sqlScale" : 0,
"generated" : true,
"dbFieldProperties" : [ "check" ]},
"name" :
{"extendedType" : "string",
"maxLength" : 255,
"dbFieldProperties" : [ "check" ]},
"raceId" :
{"extendedType" : "number",
"sqlScale" : 0,
"generated" : true,
"dbFieldProperties" : [ "check" ] }},
"required" :
[ "driverRaceMapId", "name", "raceId" ],
"additionalProperties" : false}}},
"required" : [ "name", "points", "_id", "team", "teamId" ],
"additionalProperties" : false}
1 row selected.
-- Duality View RACE_DV
SELECT json_serialize(DBMS_JSON_SCHEMA.describe('RACE_DV') PRETTY)
AS race_dv_json_schema;
RACE_DV_JSON_SCHEMA
-------------------
{"title" : "RACE_DV",
"dbObject" : "RACE_DV_OWNER.RACE_DV",
"dbObjectType" : "dualityView",
"dbObjectProperties" : [ "insert", "update", "delete", "check" ],
"type" : "object",
"properties" : {"_id" : {"extendedType" : "number",
"sqlScale" : 0,
"generated" : true,
"dbFieldProperties" : [ "check" ]},
"_metadata" : {"etag" : {"extendedType" : "string",
"maxLength" : 200},
"asof" : {"extendedType" : "string",
"maxLength" : 20}},
"dbPrimaryKey" : [ "_id" ],
"laps" : {"extendedType" : "number",
"sqlScale" : 0,
"dbFieldProperties" : [ "check" ]},
"name" : {"extendedType" : "string",
"maxLength" : 255,
"dbFieldProperties" : [ "update", "check" ]},
"podium" : {"dbFieldProperties" : [ "update" ]},
"date" : {"extendedType" : "date",
"dbFieldProperties" : [ "update", "check" ]},
"result" : {"type" : "array",
"items" :
{"type" : "object",
"properties" :
{"dbPrimaryKey" : [ "driverRaceMapId" ],
"position" :
{"extendedType" : "number",
"sqlScale" : 0,
"dbFieldProperties" : [ "update",
"check" ]},
"driverRaceMapId" :
{"extendedType" : "number",
"sqlScale" : 0,
"generated" : true,
"dbFieldProperties" : [ "check" ]},
"name" :
{"extendedType" : "string",
"maxLength" : 255,
"dbFieldProperties" : [ "update",
"check" ]},
"driverId" :
{"extendedType" : "number",
"sqlScale" : 0,
"generated" : true,
"dbFieldProperties" : [ "check" ]}},
"required" : [ "driverRaceMapId",
"name",
"driverId" ],
"additionalProperties" : false}}},
"required" : [ "laps", "name", "_id" ],
"additionalProperties" : false}
1 row selected.
関連トピック
関連項目:
-
『Oracle Database JSON開発者ガイド』のJSONデータ・ガイドに関する項を参照してください
-
『Oracle Database JSON開発者ガイド』のDBMS_JSON_SCHEMA.DESCRIBEで生成されたJSONスキーマ
-
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDESCRIBEファンクション
-
『Oracle Databaseリファレンス』のALL_JSON_DUALITY_VIEWSに関する項
-
『Oracle Databaseリファレンス』のALL_JSON_DUALITY_VIEW_TABS
-
『Oracle Databaseリファレンス』のALL_JSON_DUALITY_VIEW_TAB_COLS
-
『Oracle Databaseリファレンス』のALL_JSON_DUALITY_VIEW_LINKS
親トピック: JSONリレーショナル二面性ビューの使用
脚注一覧
脚注1: PL/SQLファンクションDBMS_JSON_SCHEMA.describe
を使用して二面性ビューの説明を取得することもできます。