[2024年8月28日 Always Freeの23aiでの作業で更新しています。]
PurchaseOrders.dmpの内容であるJSONデータが表示されます。後で使用するため、このURLをコピーして保存します。
Oracle Databaseのサンプル・スキーマのorder_entryに、JSONのサンプル・データであるPurchaseOrders.dmpが含まれています。
PurchaseOrders.dmpを開き、PurchaseOrders.dmpのRawを開きます。
https://raw.githubusercontent.com/oracle-samples/db-sample-schemas/main/order_entry/PurchaseOrders.dmp
管理者ユーザーであるADMINにて、データベース・アクションにサインインします。
grant execute on dbms_cloud to [APEXワークスペース・スキーマ];
grant all on directory data_pump_dir to [APEXワークスペース・スキーマ];
SQLワークシートから実行します。
以降はAPEXのSQLコマンドより作業を行います。
GitHubにあるPurchaseOrders.dmpを、ディレクトリDATA_PUMP_DIR以下に取得します。
begin
dbms_cloud.get_object
(
object_uri => 'https://raw.githubusercontent.com/oracle-samples/db-sample-schemas/main/order_entry/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;
以上になります。
完