D.1 移行前チェックの実行
PL/SQLプロシージャDBMS_JSON.json_type_convertible_checkを使用して、テキストJSONデータの特定の列をJSONデータ型に変換できるかどうかを確認します。
たとえば、これは、データベース・スキーマtable_ownerが所有する表j_purchaseorderのテキストJSON列dataが変換可能かどうかをチェックします。変換可能性チェックのステータスは、表my_precheck_tableに書き込まれます。
EXECUTE DBMS_JSON.json_type_convertible_check(
owner => 'table_owner',
tableName => 'j_purchaseorder',
columnName => 'data',
statusTableName => 'my_precheck_table');チェックの結果は、プロシージャの3番目のパラメータで指定された表(my_precheck_tableなど)に格納されます。この表がまだ存在しない場合は作成されます。デフォルトでは、既存の表は切り捨てられますが、オプションの5番目のパラメータがTRUEの場合、新しい結果の行は既存の表に追加されます。
デフォルトでは、JSON型コンストラクタを(事実上)使用してデータを変換しようとすると、変換可能性がチェックされます。オプションの4番目のパラメータがTRUEの場合、変換可能性はSQL条件is jsonのみを使用してチェックされます。これは、JSONデータが実際にJSON型に変換可能かどうかではなく、整形式であることをチェックするだけです。
このプロシージャは、チェックする列内の各JSON値をチェックします。変換できない各値を、変換できない理由とともにステータス表に記録します。
また、このプロシージャは、10,000行未満の表の場合は10%ずつ、10,000行から99,999行の表の場合は5%ずつ、100,000行以上の表の場合は1%ずつ、ステータス表に進行状況を記録します。進捗状況エントリには、これまでに見つかったエラーの数も表示されます。
表D-1に、結果のステータス表を示します。
表D-1 JSON型の変換可能性チェックのステータス表
| 列名 | データ型 | 説明 |
|---|---|---|
|
|
|
このステータス行(ログ・エントリ)が書き込まれた日時。 |
|
|
|
表 |
|
|
|
テキストJSON列 |
|
|
|
|
|
|
|
変換可能性エラーが検出された行のアドレス。 |
|
|
|
|
|
|
|
|
例D-1 DBMS_JSON.JSON_TYPE_CONVERTIBLE_CHECKによってレポートされた問題のあるJSONデータの検索
この例では、表table_owner.j_purchaseorderの列dataのROWID AAAWf+AAEAAAAEMAACについての、ステータス表my_precheck_table内でエラー・コードJSON SYNTAX ERRORでレポートされている無効なデータの選択方法を示しています。
SELECT data FROM table_owner.j_purchaseorder
WHERE ROWID IN (SELECT pt.ERROR_ROW_ID
FROM my_precheck_table pt
WHERE pt.schema_name = table_owner
AND pt.table_name = j_purchaseorder
AND pt.column_name = data);
親トピック: テキストJSONデータからJSONデータ型への移行