2022年4月15日金曜日

Autonomous DatabaseのDATA_PUMP_DIR以下にあるファイルを操作するアプリの作成

 Autonomous DatabaseのDATA_PUMP_DIR以下にあるファイルを、逐一コマンドを実行して確認するのが手間だったので、APEXアプリを作ってみました。

以下のような動作をします。

エクスポートしたアプリケーションを以下に起きました。

https://github.com/ujnak/apexapps/blob/master/exports/data-pump-dir.sql

実行にあたって、APEXアプリケーションをインストールしたスキーマに、ディレクトリDATA_PUMP_DIRのすべての権限が割り当てられている必要があります。

管理者ADMINにて、以下のコマンドを実行します。

grant all on directory data_pump_dir to スキーマ名;

少々、アプリケーションの説明をします。

DATA_PUMP_DIR以下のファイルを一覧している、対話モード・レポートのソースは以下です。

select * from dbms_cloud.list_files('DATA_PUMP_DIR')

ファイルの内容を表示するために使用している、PL/SQL動的コンテンツのソースは以下です。
sys.htp.p('<pre><code>');
sys.htp.p(to_clob(bfilename('DATA_PUMP_DIR', :P2_OBJECT_NAME)));
sys.htp.p('</code></pre>');

削除ボタンを実装している、プロセスのソースは以下です。
dbms_cloud.delete_file('DATA_PUMP_DIR', :P2_OBJECT_NAME);

ダウンロード処理を実装している、Ajaxコールバックのソースは以下です。
declare
    l_blob blob;
begin
    l_blob := to_blob(bfilename('DATA_PUMP_DIR', :P2_OBJECT_NAME));
    sys.htp.init;
    sys.htp.p('Content-Length: ' || dbms_lob.getlength(l_blob));
    sys.htp.p('Content-Disposition: attachment; filename=' || :P2_OBJECT_NAME);
    sys.owa_util.http_header_close;
    sys.wpg_docload.download_file(l_blob);
    apex_application.stop_apex_engine;
end;

以上になります。

簡単なアプリですが、何かの参考になれば幸いです。