Oracle APEXアプリケーションのエクスポート/インポート

# はじめに
Oracle APEXアプリケーションのエクスポートではアプリケーションで利用しているオブジェクトやデータも含めることができます。今回データも含めてエクスポートし、別のワークスペースにインポートしてみました。
環境はAutonomous Databaseを用い、エクスポートするアプリケーションは、TASKSという表を元にウィザードで作成したシンプルなアプリケーションにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/c04f6c0f-136a-4bed-a730-c7187a38fbc0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f73dc47c-c6b0-467c-a586-368d2c50497d.png)

# アプリケーションのエクスポート
## エクスポートに含めるオブジェクトの設定
エクスポートに含めるオブジェクトを設定します。
アプリケーション・ビルダーでアプリケーションを選択し、**サポートするオブジェクト**を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/4a7ecc72-64ce-4b76-b915-996c46deb122.png)

このUIでエクスポートに含めるデータベース・オブジェクト定義、データなどを定義できます。
インストールから**インストール・スクリプト**を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/236442b1-3038-4724-b887-eacf17b9a1e9.png)

続けて作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/7f9e6c40-301a-4c51-9365-a850590de765.png)

スクリプトにはタイプがあります。既存の表TASKSから定義スクリプトを作成するため、***データベース・オブジェクトから作成**を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/c01f9b0c-6dcb-4836-a70d-aed672db0863.png)

次にスクリプト属性として、名前、順序、オブジェクト・タイプを以下のように指定して、次をクリックします。

名前：任意の名前
順序：10 順序はスクリプトが実行される順番で使用されます。今回は1つだけなのでデフォルトの10のままにしました。
オブジェクト・タイプ：TABLE　


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/b7f53520-78ae-402d-94d3-86f48266f173.png)

対象のオブジェクトを指定します。TASKSを選択して次へをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f6856e5d-b446-4a17-82c4-ff3e4a8fd5d5.png)

TASKS表のDDLが表示されますので、確認後、作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/49a5e2a7-2886-40eb-8d26-6eaedf49d049.png)

表を作成するスクリプトが作成されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/8b80e0a1-3813-4afb-861d-22df08bb094a.png)

データもエクスポートに含めるため、データ・パッケージを作成します。右側から**データ・パッケージの作成**を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/b4b87399-e0ec-469f-b8e5-49568aab7925.png)

画面はスクリプトの作成でデータ・パッケージを選択した場合も同じですが、こちらのショートカットから進むと、既にTASKSが選択された状態で表示がされます。そのまま次を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/c03c4487-3768-4097-bd70-936eaa3096b5.png)

確認の画面です。**ロード後に削除**が有効の場合、インポート対象のAPEXではにデータ・パッケージのファイルは削除されます。そのままにして終了をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/265f2873-8434-412b-9491-7771ceb0b677.png)


サポートするオブジェクトにデータ・パッケージのスクリプトが作成されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/d2281f75-493b-41b6-b79d-e38672663956.png)

データ・パッケージのスクリプトの内容を見ると以下のようになっています。

>begin --TASKS: 73/10000 行がエクスポートされました, APEX\\$DATA\\$PKG/TASKS$652419 apex_data_install.load_supporting_object_data(p_table_name => 'TASKS', p_delete_after_install => true ); end;

APEX\\$DATA\\$PKG/TASKS$652419は静的アプリケーション・ファイルの名前です。
静的アプリケーション・ファイルを確認してみます。
アプリケーションのホームから**共有コンポーネント**を選択し、**ファイルとレポート**にある**静的アプリケーション・ファイル**をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/a15f81a8-0351-4415-bad5-50c3e039867c.png)

スクリプトの名前と同じzipファイルの存在が確認できます。スクリプト設定のロード後に削除が有効の場合、こちらの静的アプリケーション・ファイルがインポート先のAPEXで削除されます。
無効にするとインポート後もアプリケーションの静的アプリケーション・ファイルとして利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/d03bb0eb-83f0-4ebc-b91b-6d1556bf514d.png)

## エクスポートの実行
### 静的アプリケーション・ファイルのダウンロード
アプリケーションのエクスポートでは静的アプリケーション・ファイルは含まれないので、zipファイルの**ダウンロード**リンクをクリックし、手動でダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/d03bb0eb-83f0-4ebc-b91b-6d1556bf514d.png)

### アプリケーションのエクスポート
次にアプリケーションをエクスポートします。ホームから**エクスポート/インポート**を選んで、**エクスポート**をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f0b6aeff-5461-498f-8b37-3acdf2617256.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/8bb78021-0def-43e5-bb88-7f6762e3e55a.png)

**サポートするオブジェクトの定義**が**はい**になっていることを確認し、エクスポートします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/10380002-3306-4b23-b277-32fb3e7921f8.png)

f104.sqlというSQLスクリプトが出力されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/48de2500-1216-4bd1-833d-df463c642875.png)

# アプリケーションのインポート

ダウンロードした静的アプリケーションファイルとエクスポートしたSQLファイルf104.sqlをローカルPCの同じフォルダに配置して、何もアプリケーションを作成していない異なるワークスペースにインポートしてみます。アプリケーション・ビルダーから**インポート**を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/20ab3b6d-665c-485d-98b7-c57ed3d90a1e.png)

出力されたf104.sqlを選択して、次をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2bba9d01-0bd8-4a82-ac30-b91b9c28fb52.png)

インストールの確認です。今回アプリケーションIDは変わっても問題がないため、そのままインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/6e2c77c8-6b11-4fbd-bdd7-51ce9a83d980.png)

インストール中となり、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/81c0b5e6-5da9-4753-8cda-87dfdbb2d437.png)

その後、サポートするオブジェクトが含まれているため、以下のような確認画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/d736866b-23d6-4bf0-89c6-def890f8509d.png)

**インストールの詳細をプレビュー**をクリックするとこのような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/0e5ad606-03f7-4da2-b47c-e751724e7808.png)

プレビューを閉じて、**サポートするオブジェクトのインストール**を選ぶと、インストールが完了しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/6d81670a-c0ee-47f9-a792-dc132746447b.png)

**インストール・サマリー**はこのような内容でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/0bfb7d33-ff66-4b68-b342-d3ae4c8f588a.png)

## インポートしたアプリケーションの確認

インポートしたアプリケーションでユーザにロール割り当てを実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/c720f346-9469-4771-9a1a-681394944868.png)

その後、アプリケーションの実行をクリックします。ログイン画面が表示され、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/fa8e52e7-c97e-4c79-bfac-f5fa63a740e3.png)

ログインが成功すると、ホーム画面が正しく表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/a8829e19-d025-4f8a-8c78-4d3b11340ce6.png)

レポートにアクセスしデータも確認することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/9010aa97-79a5-487d-aeae-2457d35e85d0.png)

# おわりに
Oracle APEXで、アプリケーションで利用するオブジェクトを含めてアプリケーションのエクスポートとインポートを試してみました。気づいたところとして、データ・パッケージのスクリプトで`73/10000 行がエクスポートされました`とあるように出力できるデータは10000件が最大になるようです。（20000件のデータを持っている表で試すとエラーにはならず10000件のみ抽出されていました、変更できるような場所は見当たらず。。。）。
データのエクスポート/インポートはデータベースの機能でもできますし、要件にあわせて利用いただければいいかな、と思いました。

# 参考にさせていただいた情報
http://apexugj.blogspot.com/2021/11/new212-data-packager.html
https://doyensys.com/blogs/packaging-data-with-your-app-export-in-oracle-apex/