5.7 二面性ビューに関する情報の取得

静的データ・ディクショナリ・ビューを使用して、二面性ビュー、その基礎となる表、列およびキー列リンクに関する情報を取得できます。二面性ビューのJSONスキーマの説明を取得することもできます。これには、サポートされるJSONドキュメントの構造およびJSON言語タイプの説明が含まれています。

JSON二面性ビューの静的ディクショナリ・ビュー

既存の二面性ビューに関する情報を取得するには、静的データ・ディクショナリ・ビューDBA_JSON_DUALITY_VIEWSUSER_JSON_DUALITY_VIEWSおよびALL_JSON_DUALITY_VIEWSを確認します。脚注1これらの各ディクショナリ・ビューには、各二面性ビューについて次のものが含まれています:

  • ビュー名および所有者

  • JSON型の列の名前

  • ルート表名および所有者

  • 挿入、削除および更新の各操作をビューで許可するかどうか

  • ビューが読取り専用かどうか

  • JSON列を記述するJSONスキーマ

  • ビューが有効かどうか

  • ビューが論理レプリケーションに対して有効かどうか。

ディクショナリ・ビューDBA_JSON_DUALITY_VIEW_TABSUSER_JSON_DUALITY_VIEW_TABSおよびALL_JSON_DUALITY_VIEW_TABSを使用して、二面性ビューの基礎となるをリストできます。これらの各ディクショナリ・ビューには、二面性ビューについて次のものが含まれています:

  • ビュー名および所有者

  • 表名および所有者

  • 挿入、削除および更新の各操作を表で許可するかどうか

  • 表が読取り専用かどうか

  • 表にフレックス列があるかどうか

  • 表がビューのルート表かどうか

  • 二面性ビューの表を識別する番号

  • ビュー内の親表を識別する番号

  • 表とその親表との関係: 親内でネストされているか、外部結合または内部結合のターゲットであるか

ディクショナリ・ビューDBA_JSON_DUALITY_VIEW_TAB_COLSUSER_JSON_DUALITY_VIEW_TAB_COLSおよびALL_JSON_DUALITY_VIEW_TAB_COLSを使用して、二面性ビューの基礎となる表のをリストできます。これらの各ディクショナリ・ビューには、ビューと表の名前と所有者、その表がルート表かどうか、そのビュー内の表を識別する番号、および表内の各列に関する次の情報が含まれています:

  • 列名、データ型および最大文字数(文字データ型の場合)

  • JSONキー名

  • 挿入、削除および更新の各操作を列で許可するかどうか

  • 列が読取り専用かどうか

  • 列がフレックス列かどうか

  • 列が生成されるかどうか。

  • 列が非表示かどうか。

  • 識別列の指定におけるその列の位置(それが識別列である場合)

  • ETAG指定内の列の位置(該当する場合)

  • 二面性ビュー定義内のファンクションjson_arrayagg(または同等)のコールのORDER BY句内の列の位置(該当する場合)

ディクショナリ・ビューDBA_JSON_DUALITY_VIEW_LINKSUSER_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_VIEWSUSER_JSON_DUALITY_VIEWSおよびALL_JSON_DUALITY_VIEWSの列JSON_SCHEMAでも使用できます。「JSON二面性ビューの静的ディクショナリ・ビュー」を参照してください。)

このJSONスキーマには、次の3種類の情報が含まれています:

  1. ドキュメントをサポートする二面性ビューに関する情報

    これには、ビューを所有するデータベース・スキーマ(ユーザー) (フィールドdbObject)およびビューで許可される操作(フィールドdbObjectProperties)が含まれます。

  2. 二面性ビューの基礎となるに関する情報。

    これには、ドメイン名(フィールドdbDomain)、識別列に対応するフィールド(フィールドdbPrimaryKey)、外部キー列に対応するフィールド(フィールドdbForeignKey)、フレックス列が存在するかどうか(フィールドadditionalProperties)、列データ型の制限(文字列の場合はフィールドmaxLength、数値の場合はフィールドsqlPrecisionなど)が含まれます。

  3. ドキュメントの許可された構造およびJSON言語のタイプに関する情報

    この情報を使用して、ビューに追加または変更するデータを検証できます。これは上位レベルのスキーマフィールドpropertiesの値として使用でき、独自の権限でJSONスキーマとして使用できます。

例5-22では、DBMS_JSON_SCHEMA.describeを使用して、カーレースの例の各二面性ビュー(driver_dvrace_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.

関連トピック

関連項目:



脚注一覧

脚注1: PL/SQLファンクションDBMS_JSON_SCHEMA.describeを使用して二面性ビューの説明を取得することもできます。