表題の相談があったので、確認のために実施した作業を紹介します。
まずはテストに使用するデータを準備しました。以下のスクリプトを実行しています。
sh csv1000.sh > col1000.csv
macOSで実行したのですが、echoコマンドの動作はシェル組み込みや外部コマンドで異なるようで、OSが違うと期待通りの動作をしないかもしれません。テストに使用するCSVファイルやXLSXファイルは何でも構いません。
上記のシェル・スクリプトを実行して作成したCSVファイルを、新規に作成したExcelファイルにインポートしてcol1000.xlsxファイルを作成しました。このファイルを使って作業を進めます。
APEXのデータ・ワークショップを使う
SQLワークショップのデータ・ワークショップを使って、col1000.xlsxをロードしてみます。あらかじめ説明すると、データ・ワークショップで取り込める列数の上限は300です。そのため、col1000.xlsxはロードできません。
SQLワークショップのユーティリティのデータ・ワークショップを開きます。
データのロードを選択します。
データのロードが開きます。ロードされる列を確認するため、構成をクリックします。
ロードする列の表示の一番下を確認します。300列までしか認識されていないことが分かります。
ダイアログを閉じるをクリックします。
別の方法を試します。
APEX_DATA_PARSER.PARSEを呼び出す
先ほどアップロードされたcol1000.xlsxは、APEXの静的ワークスペース・ファイルとして保存されています。そのデータを使って、直接APEX_DATA_PARSER.PARSEを呼び出してみます。
実行するSQLは以下になります。もっとも最近にアップロードされたファイルcol1000.xlsxをロードする対象としています。
create table test_col1000
as
select * from apex_data_parser.parse(
p_content => (select document from apex_workspace_files where file_name = 'col1000.xlsx' order by created_on desc fetch first 1 rows only),
p_skip_rows => 1,
p_file_name => 'col1000.xlsx'
);
SQLワークショップのSQLコマンドより実行します。
データがロードされる表はTEST_COL1000です。
ロードされた列を確認します。
select column_name from user_tab_cols where table_name = 'TEST_COL1000' order by column_name desc;
Oracle APEXでは、パッケージAPEX_DATA_PARSERに含まれるプロシージャPARSEが、データ・ロードの基礎です。この上限が300列なので、他のすべての機能も上限は300列になります。
別の方法を試します。
データベース・アクションのデータ・ロードを使用する
APEXのワークスペース・ユーザーにてデータベース・アクションに接続できるよう、準備を行います。
管理者ユーザーADMINにてデータベース・アクションに接続し、管理のデータベース・ユーザーを開きます。
データベース・ユーザーをAPEXのワークスペース名で検索します。
データベース・ユーザーがひとつ(正確にはWKSP_で始まるユーザーが見つからない)である場合は、ワークスペース・スキーマと管理者ユーザーがひとつのデータベース・ユーザーにて賄われています。
データベース・アクションから接続できるようにするために、操作メニューからRESTの有効化を実行します。
ダイアログが開きます。スキーマ別名のデフォルトはワークスペース名になります。そのまま変更せず、REST対応ユーザーをクリックします。
ここで指定されているスキーマ別名が、データベース・アクションに接続する際に最初に入力するユーザー名になります。
操作メニューから編集を開きます。
データ・ロードを使用するために必要なロールDWROLEを、データベース・ユーザーに割り当てます。
付与されたロールのタブを開き、ロールDWROLEの付与済とデフォルトにチェックを入れます。
以上で、変更の適用をクリックします。
データベース・ユーザーをワークスペース名で検索したときに、WKSP_で始まるユーザーが見つかった場合は、RESTの有効化とロールDWROLEの割り当てはWKSP_で始まるデータベース・ユーザーに対して実施します。
管理者ユーザーADMINからサインアウトします。
データベース・アクションにサインインします。
次へ進みます。
APEXのワークスペースの管理者ユーザーのユーザー名とパスワードを入力して、サインインします。
データベース・アクションにサインインすると、画面右上に作業を行なうスキーマの名前が表示されます。このスキーマが作業を行なうスキーマになります。これはAPEXのワークスペースにサインインしたときと同じスキーマになります。
サインイン後にSQLワークショップのオブジェクト・ブラウザまたはSQLコマンドなどを開くと、デフォルトの作業スキーマを確認できます。
このスキーマは、データベース・アクションにサインインしたときのデフォルトのスキーマと一致します。
データベース・アクションに戻って、データ・ロードを実行します。
データの処理を選択してください。にはデータのロードを選択します。データの場所を選択してください。ではローカル・ファイルを選択します。
次へ進みます。
ファイルを選択をクリックし、col1000.xlsxを選択します。
ファイルのアップロードが完了します。鉛筆アイコンをクリックします。
マッピングの最後を確認します。1000列すべて認識されています(1000列が上限です)。
表の名前を設定します。この例ではTEST1000としています。
プロパティについては、ロードするファイルの内容に従って、エンコーディング、ソース列名、スキップする行などの調整が必要な場合もあるでしょう。
閉じるをクリックします。
開始アイコンをクリックします。
ステータスが完了になると、データのロードは完了です。
完了をクリックして、作業を終了します。
作成された表TEST1000は、データベース・アクションのSQLのナビゲータから確認することもできますし、
APEXのSQLワークショップのオブジェクト・ブラウザより確認することもできます。
ADBに1000列x100行のファイルをアップロードするために実施した作業の紹介は以上になります。
完