これから、バケットの作成、削除、一覧表示の機能を実装します。
バケットの一覧を取得するパイプライン表関数list_bucketsを定義します。コードは以下になります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
drop type t_bucket_tbl; | |
drop type t_bucket_row; | |
create or replace type t_bucket_row as object | |
( | |
id varchar2(4000) | |
,namespace varchar2(4000) | |
,name varchar2(4000) | |
,compartment_id varchar2(4000) | |
,created_by varchar2(4000) | |
,time_created timestamp(6) with time zone | |
,etag varchar2(4000) | |
) | |
/ | |
create or replace type t_bucket_tbl as table of t_bucket_row | |
/ | |
/* | |
* リージョン、ネームスペース、コンパートメントを指定し、そこに含まれるバケットの一覧を取得する。 | |
*/ | |
create or replace function list_buckets | |
( | |
p_namespace_name in varchar2 | |
,p_compartment_id in varchar2 | |
,p_region in varchar2 | |
,p_credential_name in varchar2 | |
) | |
return t_bucket_tbl pipelined | |
as | |
response dbms_cloud_oci_obs_object_storage_list_buckets_response_t; | |
bucket dbms_cloud_oci_object_storage_bucket_summary_t; | |
l_bucket t_bucket_row; | |
plsql_sdk_error exception; | |
begin | |
response := dbms_cloud_oci_obs_object_storage.list_buckets( | |
namespace_name => p_namespace_name | |
,compartment_id => p_compartment_id | |
,region => p_region | |
,credential_name => p_credential_name | |
); | |
if response.status_code != 200 then | |
raise plsql_sdk_error; | |
end if; | |
for i in 1 .. response.response_body.count | |
loop | |
bucket := response.response_body(i); | |
l_bucket := t_bucket_row( | |
bucket.name -- nameが一意なのでnameをidとする | |
,bucket.namespace | |
,bucket.name | |
,bucket.compartment_id | |
,bucket.created_by | |
,bucket.time_created | |
,bucket.etag | |
); | |
pipe row(l_bucket); | |
end loop; | |
end; | |
/ |
メニューのSQLワークショップよりSQLスクリプトを実行します。
スクリプト名にlist_bucketsと入力し、本文にPL/SQLコードを貼り付けて、実行をクリックします。
ページ定義の名前はバケット一覧とします。フォーム・ページを含めるをONに変更し、フォーム・ページ名はバケット操作とします。フォーム・ページ・モードとしてモーダル・ダイアログを選択します。
レポートとフォームのページが作成されます。レポートのページを実行してみます。
同様にページ・アイテムP3_COMPARTMENT_IDのデフォルトをG_COMPARTMENT_IDとします。
登録済みのSQLスクリプトの一覧画面より、作成をクリックします。
即時実行をクリックします。
これからバケットの一覧、作成、更新、削除を行うページを作成します。
アプリケーション・ビルダーから作成中のアプリケーションを開き、ページの作成を実行します。
対話モード・レポートをクリックします。
ページ定義の名前はバケット一覧とします。フォーム・ページを含めるをONに変更し、フォーム・ページ名はバケット操作とします。フォーム・ページ・モードとしてモーダル・ダイアログを選択します。
データ・ソースのソース・タイプにSQL問合せを選択し、以下のSELECT文を記述します。
select * from list_buckets
(
p_namespace_name => :G_NAMESPACE_NAME
, p_compartment_id => :G_COMPARTMENT_ID
, p_region => :G_REGION
, p_credential_name => :G_CREDENTIAL_NAME
)
ナビゲーションのブレッドクラムの使用、ナビゲーションの使用はともにONにします。
以上を設定し、次へ進みます。
主キー列1としてID(Varchar2)を選択し、ページの作成を実行します。
レポートとフォームのページが作成されます。レポートのページを実行してみます。
レポートのページが開くことを確認します。
バケットが一覧されるようになったので、続いてバケットの作成/更新/削除を行うためにフォームのページを変更します。
バケット操作のページをページ・デザイナで開き、左ペインでプロセス・ビューを表示します。フォームの処理を行うプロセス - プロセス・フォームバケット操作を選択し、設定を変更します。
ターゲット・タイプをRegion SourceからPL/SQL Codeに変更し、以下のPL/SQLコードを挿入/更新/削除するPL/SQLコードに記述します。失われた更新の防止はOFF、行のロックはNoに変更します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_create_bucket_details dbms_cloud_oci_object_storage_create_bucket_details_t; | |
l_update_bucket_details dbms_cloud_oci_object_storage_update_bucket_details_t; | |
l_create_response dbms_cloud_oci_obs_object_storage_create_bucket_response_t; | |
l_update_response dbms_cloud_oci_obs_object_storage_update_bucket_response_t; | |
l_delete_response dbms_cloud_oci_obs_object_storage_delete_bucket_response_t; | |
l_status_code integer; | |
plsql_sdk_error exception; | |
begin | |
case | |
when :APEX$ROW_STATUS = 'C' then | |
l_create_bucket_details := | |
new dbms_cloud_oci_object_storage_create_bucket_details_t; | |
l_create_bucket_details.name := :P3_NAME; | |
l_create_bucket_details.compartment_id := :P3_COMPARTMENT_ID; | |
l_create_response := dbms_cloud_oci_obs_object_storage.create_bucket | |
( | |
namespace_name => :P3_NAMESPACE | |
, create_bucket_details => l_create_bucket_details | |
, region => :G_REGION | |
, credential_name => :G_CREDENTIAL_NAME | |
); | |
l_status_code := l_create_response.status_code; | |
when :APEX$ROW_STATUS = 'U' then | |
-- 何もアップデートしないけど、参考のためにupdate_bucketを呼び出します。 | |
l_update_bucket_details := | |
new dbms_cloud_oci_object_storage_update_bucket_details_t; | |
l_update_response := dbms_cloud_oci_obs_object_storage.update_bucket | |
( | |
namespace_name => :P3_NAMESPACE | |
, bucket_name => :P3_NAME | |
, update_bucket_details => l_update_bucket_details | |
, region => :G_REGION | |
, credential_name => :G_CREDENTIAL_NAME | |
); | |
l_status_code := l_create_response.status_code; | |
when :APEX$ROW_STATUS = 'D' then | |
l_delete_response := dbms_cloud_oci_obs_object_storage.delete_bucket | |
( | |
namespace_name => :P3_NAMESPACE | |
, bucket_name => :P3_NAME | |
, region => :G_REGION | |
, credential_name => :G_CREDENTIAL_NAME | |
); | |
l_status_code := l_create_response.status_code; | |
end case; | |
if l_status_code != 200 then | |
raise plsql_sdk_error; | |
end if; | |
end; |
入力を容易にするため、ネームスペース名とコンパートメントIDについては、置換文字列がデフォルトになるように設定します。
ページ・アイテムP3_NAMESPACEを選択し、デフォルトのタイプをアイテム、アイテムとしてG_NAMESPACE_NAMEを入力します。
実装している操作は、実質的にはバケットの作成と削除です。更新はコード上はありますが、動作の確認ができるような処理は実装していません。
バケットの作成をしてみます。入力するのはNameだけです。ここではtestと入力しています。バケットの作成には不要なページ・アイテムが表示されていますが、対処は省略します。サーバー側の条件などを設定し、非表示するのが望ましい対応でしょう。
作成をクリックします。
バケットが作成されたことを確認できます。
編集アイコンをクリックします。作成したバケットの削除を実行します。
この削除処理を実行しますか。と確認を求められるのでOKをクリックします。
バケットが削除されました。
バケットに日本語を入力するとエラーが発生しますが、これは元々バケット名として使用可能な文字に制限があるためです。OCIのコンソールから日本語のバケットを作ろうとしても同様にエラーになります。ですので、PL/SQL SDKの問題ではありません。
オブジェクトを操作するためのページを作成するため、バケットを作成しておきます。先ほど削除しましたが、再度testというバケットを作成しておきましょう。
バケットの操作については完了しました。
続く