表題の相談があったので、確認のために実施した作業を紹介します。
まずはテストに使用するデータを準備しました。以下のスクリプトを実行しています。
sh csv1000.sh > col1000.csv
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
#!/bin/sh | |
NUMCOLS=1000 | |
NUMROWS=100 | |
# generate header | |
let i=1; | |
while true | |
do | |
/bin/echo -n col$i | |
/bin/echo -n "," | |
let i=$i+1; | |
if [ $i -gt $NUMCOLS ]; then | |
break; | |
fi | |
done | |
echo | |
# generate data | |
let j=1; | |
let i=1; | |
while true | |
do | |
while true | |
do | |
/bin/echo -n abcdefg | |
/bin/echo -n "," | |
let i=$i+1; | |
if [ $i -gt $NUMCOLS ]; then | |
break; | |
fi | |
done | |
let i=1; | |
let j=$j+1; | |
echo | |
if [ $j -gt $NUMROWS ]; then | |
echo | |
exit; | |
fi | |
done |
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行のファイルをアップロードするために実施した作業の紹介は以上になります。
完