
はじめに
こんにちは。Oracle Cloud Infrastructure検証チームです。
今回は【OCI】BaseDBでオブジェクトストレージを利用する(DBMS_CLOUD編②)の続きとなります。
前回、DBMS_CLOUDパッケージを利用してオブジェクトストレージにアクセスできたので、今回は実際にオブジェクトストレージの中を参照してみます。
オブジェクトのアップロード
オブジェクトストレージに「ocitutorials_sales.csv」というCSVファイルをアップロードします。
CSVファイルの中身は以下になります。
ocitutorials_sales.csv =============================== C,CHANNEL_LONG,CHANNEL_CLASS S,Direct Sales,Direct T,Table Sales,Direct C,Catalog,Indirect I,Internet,Indirect P,Partners,Others ===============================
オブジェクトの参照
アップロードしたオブジェクトがDB上から参照できるか確認するため、PDBに接続して以下のSQL実行します。
select * from dbms_cloud.list_objects('<クレデンシャル名>','<オブジェクト・ストレージのバケットのURL>');
[oracle@ocitest ~]$ sqlplus DBMSTEST@PDB_ORCL
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Apr 22 22:59:39 2026
Version 19.28.0.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Enter password:
Last Successful login time: Fri Apr 17 2026 18:36:15 +09:00
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.28.0.0.0
SQL> select * from dbms_cloud.list_objects
('DBMS_CLOUD_TEST','https://objectstorage.ap-tokyo-1.oraclecloud.com/n/XXXXXXXXXXXX/b/demo/o');
OBJECT_NAME BYTES CHECKSUM CREATED LAST_MODIFIED
------------------------------ ---------- ----------------------------------- ----------------------------------
------ ----------------------------------------
ocitutorials_sales.csv 132 7029e5380089724434873278cfae43b4
17-APR-26 08.06.10.430000 AM +09:00
DB上からアップロードした「ocitutorials_sales.csv」を参照することができました。
CSVファイルを外部表で取込
次にDBMS_CLOUDパッケージの機能である DBMS_CLOUD.CREATE_EXTERNAL_TABLE を利用し、外部表としてCSVファイルを参照・定義します。
PDBに接続して、DBMS_CLOUD.CREATE_EXTERNAL_TABLE を実行します。
※file_uri_list でファイル名までURL指定する必要があります。
[oracle@ocitest ~]$ sqlplus DBMSTEST@PDB_ORCL SQL*Plus: Release 19.0.0.0.0 - Production on Wed Apr 22 23:07:32 2026 Version 19.28.0.0.0 Copyright (c) 1982, 2025, Oracle. All rights reserved. Enter password: Last Successful login time: Wed Apr 22 2026 22:59:42 +09:00 Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.28.0.0.0 SQL> SQL> select * from TUTORIAL_SALES; select * from TUTORIAL_SALES * ERROR at line 1: ORA-00942: table or view does not exist ★ 実行前のためエラーが発生 SQL> SQL> SQL> begin DBMS_CLOUD.CREATE_EXTERNAL_TABLE(table_name=>'TUTORIAL_SALES', 2 credential_name => 'DBMS_CLOUD_TEST', 3 file_uri_list => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/XXXXXXXXXXXX/b/demo/o/ocitutorials_sales.csv', 4 format => json_object('delimiter' value ',' ), 5 column_list =>'channel_short varchar2(1), 6 channel_long varchar2(20), 7 channel_class varchar2(20)'); 8 end; 9 / PL/SQL procedure successfully completed. SQL> SQL> select * from TUTORIAL_SALES; C CHANNEL_LONG CHANNEL_CLASS - -------------------- -------------------- C CHANNEL_LONG CHANNEL_CLASS S Direct Sales Direct T Table Sales Direct C Catalog Indirect I Internet Indirect P Partners Others 6 rows selected.
DBMS_CLOUD.CREATE_EXTERNAL_TABLE 実行後のSELECT結果が変わり、オブジェクトにアップロードしたCSVファイルと同じデータであることが確認できました。
CSVファイルを実表で取込
先ほどは外部表を参照しているため、実データはデータベース内にありません。
CREATE TABLE ... AS SELECT文で外部表を実表に取り込むことも可能ですが、今回はテーブルを事前に作成して実データとして取り込んでみたいと思います。
PDBに接続して、事前にテーブルを作成します。その後 DBMS_CLOUD.COPY_DATA を実行します。
[oracle@ocitest ~]$ sqlplus DBMSTEST@PDB_ORCL SQL*Plus: Release 19.0.0.0.0 - Production on Wed Apr 22 23:07:32 2026 Version 19.28.0.0.0 Copyright (c) 1982, 2025, Oracle. All rights reserved. Enter password: Last Successful login time: Wed Apr 22 2026 22:59:42 +09:00 Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.28.0.0.0 SQL> SQL> CREATE TABLE TUTORIAL_SALES2 2 (channel_id CHAR(1), 3 channel_desc VARCHAR2(20), 4 channel_class VARCHAR2(20) 5 ); Table created. SQL> SQL> select * from TUTORIAL_SALES2; no rows selected ★ 取込前なので何もデータが無い SQL> BEGIN 2 DBMS_CLOUD.COPY_DATA( 3 table_name =>'TUTORIAL_SALES2', 4 credential_name =>'DBMS_CLOUD_TEST', 5 file_uri_list =>'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/XXXXXXXXXXXX/b/demo/o/ocitutorials_sales.csv', 6 format => json_object('delimiter' value ',') 7 ); 8 END; 9 / PL/SQL procedure successfully completed. SQL> select * from TUTORIAL_SALES2; C CHANNEL_DESC CHANNEL_CLASS - -------------------- -------------------- C CHANNEL_LONG CHANNEL_CLASS S Direct Sales Direct T Table Sales Direct C Catalog Indirect I Internet Indirect P Partners Others 6 rows selected.
DBMS_CLOUD.COPY_DATA 実行後のSELECT結果が変わり、外部表と同じデータであることが確認できました。
最後に
いかがでしょうか。
ローカル領域を経由しなくてもオブジェクトストレージにあるオブジェクトを参照や取り込みできました。
ここまで見ていただいたところでCSVファイルではなく、直接ダンプファイルをインポートできないのか?といった疑問を持った方もいらっしゃるかと思います。
残念ながら19cはData Pumpを使用したダイレクト転送はサポートされていません。
21.3以降のバージョンで直接インポートすることが可能になっています。
次回は最新の26ai環境でDBMS_CLOUDパッケージを使用してダンプファイルを直接インポートしてみたいと思います。
次回もよろしくお願いします。
投稿者プロフィール

-
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早8年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!
最新技術情報や資格情報をチェックしたいアナタ!毎日遊びに来てください。きっとお役に立てます。
最新の投稿
Oracle2026年7月21日Oracleのエラーコード「ORA-06512」とは?その原因と対処法を解説!
Oracle Database 管理2026年7月16日GUIを使わずにサイレント・モードでOracle Databaseを作成してみた_レスポンスファイル使用編
Dbvisit Standby2026年7月15日【Dbvisit Standby】PostgreSQLでDRを構成(Linux)してみました!
Oracle Cloud2026年7月14日【OCI】BaseDBでオブジェクトストレージを利用する(DBMS_CLOUD編③)_実践

