5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Autonomous AI Databae:OCI Object Storageのバケットを作成するPL/SQLプロシージャを作ってみた

5
Posted at

はじめに

Autonomous AI Databaseを利用していると、さまざまなシーンでOCI Object Storageを使用します。

その際、毎回OCIコンソールにアクセスしてバケットを作成するのが面倒なので、SQL*PlusやSQLclのようなSQL実行環境からOCI Object Storageのバケットを作成できると便利かと思い、バケットの名前とバケットを作成するリージョンを指定して実行すると、Autonomous AI Databaseと同じコンパートメント内にバケットを作成するPL/SQLプロシージャをPL/SQL SDKを使用して作成してみました。

なお、この記事ではObject Storageバケットの作成にAutonomous AI Databaseのリソース・プリンシパルを使用していますので、こちらのマニュアルを参考にして、動的グループ、ポリシーを作成し、リソース・プリンシパルを有効化しておく必要があります。

また、ここではOCI東京リージョン(ap-tokyo-1)にあるAutonomous AI Databaseで操作確認を行なっています。

注意
こちらの記事の内容はあくまで個人のメモ的な内容のため、こちらの内容を利用した場合のトラブルには一切責任を負いません。
また、こちらの記事の内容を元にしたOracleサポートへの問い合わせはご遠慮ください。

1. PL/SQLプロシージャの作成

1つめのパラメータとして作成するバケットの名前、2つめのパラメータとしてバケットを作成するリージョンを指定して実行すると、OCI Object Storageバケットを作成するPL/SQLプロシージャcreate_bucketを作成します。

2つ目のパラメータを省略した場合には、プロシージャを実行するAutonomous AI Databaseと同じリージョンにバケットが作成されます。

create_bucketプロシージャ
CREATE OR REPLACE PROCEDURE create_bucket(
    bucket_name IN VARCHAR2,             -- 作成するバケットの名前
    in_region   IN VARCHAR2 DEFAULT NULL -- バケットを作成するリージョン
)
IS
    -- 変数の宣言
    resp_get_namespace   DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_GET_NAMESPACE_RESPONSE_T;
    resp_create_bucket   DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_CREATE_BUCKET_RESPONSE_T;
    create_bucket_detail DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T := DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T();
    adb_region           VARCHAR2(20);
    adb_compartment_ocid VARCHAR2(100);
    region               VARCHAR2(20);
    namespace            VARCHAR2(100);

BEGIN
    -- ADBが存在するリージョンとコンパートメントのOCIDを取得
    SELECT JSON_VALUE(cloud_identity, '$.REGION'), LOWER(JSON_VALUE(cloud_identity, '$.COMPARTMENT_OCID'))
	    INTO adb_region, adb_compartment_ocid FROM v$pdbs;

    -- 第2引数(region)が入力されていない場合はADBがあるリージョンをリージョンに指定する
    IF in_region IS NULL THEN
        region := adb_region;
    ELSE
        region := in_region;
    END IF;

    -- オブジェクト・ストレージ・ネームスペースを取得
    resp_get_namespace := DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.GET_NAMESPACE(
                              region          => region,
                              credential_name => 'OCI$RESOURCE_PRINCIPAL'
	                      );
    namespace := REPLACE(resp_get_namespace.response_body, '"', '');

    -- バケット作成時のパラメータをセット
    create_bucket_detail.name           := bucket_name;
    create_bucket_detail.compartment_id := adb_compartment_ocid;

    -- PL/SQL SDKを使用してバケットを作成
    resp_create_bucket := DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.CREATE_BUCKET(
                              region                => region,
                              credential_name       => 'OCI$RESOURCE_PRINCIPAL',
                              namespace_name        => namespace,
                              create_bucket_details => create_bucket_detail
                          );
END;
/

上記を実行して、PL/SQLプロシージャを作成します。

SQL> CREATE OR REPLACE PROCEDURE create_bucket(
  2  	 bucket_name IN VARCHAR2,
  3  	 in_region   IN VARCHAR2 DEFAULT NULL
  4  )
  5  IS
  6  	 resp_get_namespace   DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_GET_NAMESPACE_RESPONSE_T;
  7  	 resp_create_bucket   DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_CREATE_BUCKET_RESPONSE_T;
  8  	 create_bucket_detail DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T := DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T();
  9  	 adb_region	          VARCHAR2(20);
 10  	 adb_compartment_ocid VARCHAR2(100);
 11  	 region 	          VARCHAR2(20);
 12  	 namespace	          VARCHAR2(100);
 13  
 14  BEGIN
 15  	 SELECT JSON_VALUE(cloud_identity, '$.REGION'), LOWER(JSON_VALUE(cloud_identity, '$.COMPARTMENT_OCID'))
 16  		 INTO adb_region, adb_compartment_ocid FROM v$pdbs;
 17  
 18  	 IF in_region IS NULL THEN
 19  	     region := adb_region;
 20  	 ELSE
 21  	     region := in_region;
 22  	 END IF;
 23  
 24  	 resp_get_namespace := DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.GET_NAMESPACE(
 25  				               region	       => region,
 26  				               credential_name => 'OCI$RESOURCE_PRINCIPAL'
 27  			               );
 28  	 namespace := REPLACE(resp_get_namespace.response_body,'"','');
 29  
 30  	 create_bucket_detail.name	         := bucket_name;
 31  	 create_bucket_detail.compartment_id := adb_compartment_ocid;
 32  
 33  	 resp_create_bucket := DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.CREATE_BUCKET(
 34  				               region		         => region,
 35  				               credential_name	     => 'OCI$RESOURCE_PRINCIPAL',
 36  				               namespace_name	     => namespace,
 37  				               create_bucket_details => create_bucket_detail
 38  			               );
 39  END;
 40  /

Procedure created.

SQL>

2. 動作確認

PL/SQLプロシージャが作成できたので、早速実行してみます。

まずは第1パラメータに「mytestbucket」、第2パラメータに「ap-osaka-1」(大阪リージョン)を指定して、create_bucketプロシージャを実行してみます。

SQL> exec create_bucket('mytestbucket','ap-osaka-1');

PL/SQL procedure successfully completed.

SQL>

OCIコンソールで確認してみると、大阪リージョンにmytestbucketという名前のバケットが作成されていることが確認できました。

スクリーンショット 2026-06-25 8.57.27.png

次に、パラメータに「mytestbucekt2」のみを指定して、create_bucketプロシージャを実行してみます。

SQL> exec create_bucket('mytestbucket2');

PL/SQL procedure successfully completed.

SQL>

OCIコンソールで確認してみると、Autonomous AI Databaseがある東京リージョンにmytestbucket2という名前のバケットが作成されていることが確認できました。

スクリーンショット 2026-06-25 9.02.25.png

参考情報

リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセス
DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_GET_NAMESPACE_RESPONSE_T
DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_CREATE_BUCKET_RESPONSE_T
DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T
Oracle Autonomous AI Database Serverlessの使用:テナンシ詳細の取得
DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.GET_NAMESPACEファンクション
DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.CREATE_BUCKETファンクション

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?