最初にOracle Databaseのサンプル・スキーマをGitHubからダウンロードします。
https://github.com/oracle/db-sample-schemas
サンプル・スキーマには以下のファイルが含まれています。
db-sample-schemas-master/order_entry/PurchaseOrders.dmp
このファイルがJSONのデータなので、このファイルをロードします。
OCIのコンソールより、オブジェクト・ストレージを呼び出します。
オブジェクト・ストレージの画面が開いたら、バケットの作成を行います。
バケット名は任意ですが、今回はJSONとします。それ以外はデフォルトのままで、作成します。
バケットが作成されたら、作成されたバケット名(今回はJSON)のリンクをクリックして開きます。
可視性の編集をクリックして、設定を変更します。
可視性はパブリックにします。JSONデータの取り込みが済んだら、作成したバケットは削除しましょう。
オブジェクトのアップロードをクリックし、サンプル・スキーマに含まれているPurchaseOrders.dmpをアップロードします。
アップロードが終了済になったらパネルを閉じます。
アップロードされたオブジェクトのURLパス(URI)を確認するために、一番右のメニューから、オブジェクト詳細の表示を実行します。
URLパス(URI)をコピーしておきます。
以降の作業は、 SQL Developer Webから行います。ユーザーは管理者ユーザーであるADMINにてサインインします。
SQLワークシートを開きます。
最初にオブジェクト・ストレージにあるPurchaseOrders.dmpをディレクトリDATA_PUMP_DIR以下に取得します。
begin
dbms_cloud.get_object
(
object_uri => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/id9korehachigauyo/b/JSON/o/PurchaseOrders.dmp',
directory_name => 'DATA_PUMP_DIR'
);
end;
ディレクトリDATA_PUMP_DIRの内容をリストし、ファイルが取得できていることを確認します。
SELECT * FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');
JSONデータを読み込む表J_PURCHASEORDERを作成します。今回はネイティブJSON型の確認を行うため、列PO_DOCUMENTの型をJSONとして指定します。
CREATE TABLE j_purchaseorder
(
id VARCHAR2 (32) NOT NULL PRIMARY KEY,
date_loaded TIMESTAMP (6) WITH TIME ZONE,
po_document JSON
);
データを取り込む表が作成されたので、以下のPL/SQLスクリプトでファイルの内容を表に書き込みます。
DECLARE
V1 VARCHAR2(32767);
F1 UTL_FILE.FILE_TYPE;
c integer := 0;
BEGIN
F1 := UTL_FILE.FOPEN('DATA_PUMP_DIR','PurchaseOrders.dmp','R',3000);
loop
begin
UTL_FILE.GET_LINE(F1,V1,3000);
-- dbms_output.put_line(substr(v1,1,80));
insert into j_purchaseorder(id, date_loaded, po_document) values(sys_guid(), systimestamp, v1);
c := c + 1;
exception
when UTL_FILE.READ_ERROR or no_data_found then
utl_file.fclose(f1);
exit;
end;
end loop;
dbms_output.put_line('Read = ' || c);
commit;
END;
10000行読み込まれていれば、完了です。以下のようなJSONの内容を表示するSQLを実行して、確認してみましょう。
select json_value(po.po_document, '$.PONumber') from j_purchaseorder po;
以上になります。
完