D.2 テキストJSONの問合せによるJSON型列の移入
この移行方法では、元の表を問い合せて新しい表に移入します。これは、CREATE TABLE
文またはINSERT
文の一部として行います。新しい表の形状は元の表と同じですが、テキストJSON列ではなくJSON
型列が含まれます。
問合せをCREATE TABLE AS SELECT
(CTAS)文の一部として発行するか、INSERT
をSELECT
(IAS)文として発行します。いずれの場合も、新しい表に移入した後、古い表は削除(または3つ目のなんらかの名前に変更)され、新しい表の名前が元の表名に変更されます。
例D-2および例D-3に、新しい表を作成して移入する2つの方法を示します。
これらの各例では、例14-3で作成した表j_purchaseorder
のテキストJSON BLOB
列po_document
のデータを移行します。それぞれ、JSON
データ型コンストラクタを使用して、元のテキストJSONデータからネイティブ・バイナリJSONデータを作成します。それぞれ、元の列と同じ列(同じ名前と同じデータ)が含まれる新しい表j_purchaseorder_new
を使用します。ただし、JSONデータはJSON
型です。
新しい表の名前の変更は、例D-4を参照してください。
例D-2 CREATE TABLE AS SELECT (CTAS)を使用したJSONデータ型への移行
この例では、例4-1に似たコードを使用して新しい表j_purchaseorder_new
を作成しましたが、作成時に元の表内のテキストJSONデータの問合せを使用して表に移入します。
CREATE TABLE j_purchaseorder_new PARALLEL NOLOGGING AS
SELECT id id, date_loaded date_loaded, JSON(po_document) po_document
FROM j_purchaseorder;
関連項目:
CREATE TABLE AS SELECT
を使用して表をパラレルで作成して移入する方法の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』のパラレルでの表の作成および移入によるパフォーマンスの最適化に関する項を参照してください
例D-3 INSERTをSELECT (IAS)として使用したJSONデータ型への移行
この例では、例4-1のようなコードを使用して新しい表j_purchaseorder_new
を作成していることを前提としています。元のテキストJSONデータを問い合せるINSERT
文を使用して、JSON
型列を移入します。
INSERT /*+ PARALLEL APPEND */
INTO j_purchaseorder_new (id, date_loaded, po_document)
SELECT id, date_loaded, JSON(po_document)
FROM j_purchaseorder;
オプティマイザ・ヒントPARALLEL
は、オプティマイザにINSERT
文をパラレルに起動するようにリクエストします。
オプティマイザ・ヒントAPPEND
は、表にすでに割り当てられている領域を使用するのではなく、表の最後にデータを追加するダイレクト・パス・インサートを使用するようにオプティマイザにリクエストします。ダイレクト・パス・インサートは、従来型のインサートよりも大幅に速くなります。
関連項目:
例D-4 元の表名への新しい表名の変更
この例では、JSON
型列が含まれる新しい表の名前を、テキストJSON列が含まれる元の表の名前に変更します。
この名前の変更を行う前に、元の表は削除されます。あるいは、元の表をすぐに削除しない場合は、元の表の名前を変更できます。ただし、名前を変更するには、まず、それに依存する既存のマテリアライズド・ビューを削除する必要があります。「依存オブジェクトの処理」を参照してください。このような依存マテリアライズド・ビューがあるかぎり、表の名前は変更できません。
ノート:
元の表を削除する前に、新しい表の整合性を検証します。表が完全で正しいことを確認してください。JSON列の型を除き、列名およびデータ型が元と同じである必要があります。
DROP TABLE j_purchaseorder;
ALTER TABLE j_purchaseorder_new RENAME TO j_purchaseorder;
親トピック: テキストJSONデータからJSONデータ型への移行