11.9 PARSEファンクション

これはメイン・パーサー・ファンクションです。XML、XLSX、CSVまたはJSONファイルを解析して、次の構造の一般的な表を返すことができます。
LINE_NUMBER COL001 COL002 COL003 COL004 ... COL300

すべての値はVARCHAR2形式で返されます。返される表の行は、最大で300個の列を持つことができます。表の列の最大長は4000バイトです。行長の制限はありません。

このファンクションを呼び出すと、ファイルの解析がすぐに実行されます。コレクションまたは一時表にはデータは書き込まれません。

P_FILE_PROFILEパラメータを渡さない場合、このファンクションは解析中に列情報を使用してファイル・プロファイルを計算します。P_DETECT_DATA_TYPES'Y' (デフォルト)として渡した場合、このファンクションは解析時に列のデータ型も検出します。計算されたファイル・プロファイルは、このファンクションの終了後にGET_FILE_PROFILEを使用して取得できます。

  1. PARSEの呼出し - この表ファンクションを使用して、ファイルを解析し、データ・プレビューを表示するための行と列を取得します。
  2. GET_FILE_PROFILEの呼出し - ファイル・プロファイル情報をJSON形式で取得します。
  3. データの処理 - カスタム処理を実行するためのデータ・プロファイルに基づいてSQL問合せを生成します。

注意:

  • JSON解析は、データベース・バージョン11.2および12.1.0.1でサポートされます。この場合、このファンクションはAPEX_JSONファンクションおよびXMLTABLEファンクションを使用します。パフォーマンス上の理由により、データベースを少なくとも12.2にアップグレードすることをお薦めします。それらのバージョンでは、JSON解析が大幅に速く処理されます。
  • XLSX解析は、APEX_ZIPを使用してXLSXアーカイブから個々のXMLファイルを抽出することによって実行されます。実際のXLSX解析は、XMLTABLE SQLファンクションを使用して実行されます。

構文

function parse(
    p_content                      in blob,
    p_file_name                    in varchar2     default null,
    p_file_type                    in t_file_type  default null,
    p_file_profile                 in clob         default null,
    p_detect_data_types            in varchar2     default 'Y',
    p_decimal_char                 in varchar2     default null,
    p_xlsx_sheet_name              in varchar2     default null,
    p_row_selector                 in varchar2     default null,
    p_csv_row_delimiter            in varchar2     default LF,
    p_csv_col_delimiter            in varchar2     default null,
    p_csv_enclosed                 in varchar2     default '"',
    p_skip_rows                    in pls_integer  default 0,
    p_add_headers_row              in varchar2     default 'N',
    p_file_charset                 in varchar2     default 'AL32UTF8',
    p_max_rows                     in number       default null,
    p_return_rows                  in number       default null,
    p_store_profile_to_collection  in varchar2     default null ) return wwv_flow_t_parser_table pipelined;

パラメータ

表11-6 PARSEファンクションのパラメータ

パラメータ 説明

P_CONTENT

BLOBとして解析されるファイル・コンテンツ

P_FILE_NAME

ファイル・タイプの導出にのみ使用されるファイルの名前。P_FILE_NAMEP_FILE_TYPEまたはP_FILE_PROFILEのいずれかを渡す必要があります。

P_FILE_TYPE

解析するファイルのタイプ。ファイル・タイプを明示的に渡す場合に使用します。P_FILE_NAMEP_FILE_TYPEまたはP_FILE_PROFILEのいずれかを渡す必要があります。

P_FILE_PROFILE

解析に使用されるファイル・プロファイル。ファイル・プロファイルは、以前のPARSE()の呼出しで計算されている可能性があります。再度渡した場合、このファンクションは、パフォーマンスを改善するために、一部のプロファイル検出ロジックをスキップして、渡されたプロファイルを使用します。

P_DETECT_DATA_TYPES

解析中にデータ型(NUMBER、DATE、TIMESTAMP)を検出するかどうか。'Y'に設定すると、このファンクションはファイル・プロファイルを計算し、そのプロファイルにデータ型情報を追加します。'N'に設定すると、データ型は検出されず、すべての列がVARCHAR2になります。デフォルトは'Y'です。

P_DECIMAL_CHAR

NUMBERデータ型を検出する場合は、この小数点文字を使用します。指定しない場合、プロシージャで小数点文字が自動検出されます。

P_XLSX_SHEET_NAME

XLSXワークブックの場合。解析するワークシートの名前。省略した場合、このファンクションは最初に検出されたワークシートを使用します。

P_ROW_SELECTOR

JSONおよびXMLファイルの場合。JSONまたはXMLファイル内の行の配列/リストへのポインタ。省略した場合、このファンクションは次のように処理します。

  • XMLファイルの場合: "/*/*" (ルート・タグの下の最初のタグ)を行セレクタとして使用します。
  • JSONファイルの場合: JSON配列を探し、最初に見つかった配列を使用します。

P_CSV_ROW_DELIMITER

CSV解析のデフォルトの行デリミタをオーバーライドします。

P_CSV_COL_DELIMITER

特定のCSV列デリミタを使用します。省略した場合、ファンクションは最初の行の内容に基づいて列デリミタを検出します。

P_CSV_ENCLOSED

CSV解析のデフォルトの囲み文字をオーバーライドします。

P_SKIP_ROWS

解析時に最初のN行をスキップします。

P_ADD_HEADERS_ROW

XML、JSONの場合。列ヘッダー(タグ、属性名)を最初の行として表示します。

P_FILE_CHARSET

ファイル・エンコーディング(UTF-8 (AL32UTF8)以外の場合)。

P_MAX_ROWS

P_MAX_ROWSが返された後、解析を停止します。

P_RETURN_ROWS

返される行数。これはパーサーが返す予定の行数よりも多くの行が解析されそうな(データ型検出のため)場合に役立ちます。指定された行数が出力されると、このファンクションは、P_MAX_ROWSに達するまで、またはSQL問合せのROWNUM < x句に到達して実行が停止されるまで、解析(および検出されたデータ型の調整)を続行します。

P_STORE_PROFILE_TO_COLLECTION

解析時に計算されたファイル・プロファイルをコレクションに格納します。コレクションが存在する場合は、クリアされます。計算されたプロファイルにのみ使用できます。

戻り値

APEX_T_PARSER_ROW型の行を返します。

LINE_NUMBER COL001 COL002 COL003 COL004 ... COL300
 

select line_number, col001,col002,col003,col004,col005,col006,col007,col008 
   from table( 
              wwv_flow_data_parser.parse(
                  p_content         => {BLOB containing XLSX spreadsheet},
                  p_file_name       => 'test.xlsx',
                  p_xlsx_sheet_name => 'sheet1.xml') ) ;

LINE_NUMBER COL001   COL002       COL003       COL004   COL005          COL006   COL007       COL008 
----------- -------- ------------ ------------ -------- --------------- -------- ------------ ------------- 
          1 0        First Name   Last Name    Gender   Country         Age      Date         Id       
          2 1        Dulce        Abril        Female   United States   32       15/10/2017   1562     
          3 2        Mara         Hashimoto    Female   Great Britain   25       16/08/2016   1582     
          4 3        Philip       Gent         Male     France          36       21/05/2015   2587     
          5 4        Kathleen     Hanner       Female   United States   25       15/10/2017   3549     
          6 5        Nereida      Magwood      Female   United States   58       16/08/2016   2468     
          7 6        Gaston       Brumm        Male     United States   24       21/05/2015   2554     
          8 7        Etta         Hurn         Female   Great Britain   56       15/10/2017   3598     
          9 8        Earlean      Melgar       Female   United States   27       16/08/2016   2456     
         10 9        Vincenza     Weiland      Female   United States   40       21/05/2015   6548     
          : :        :            :            :        :               :        :            :

select line_number, col001,col002,col003,col004,col005,col006,col007,col008 
   from table( 
              wwv_flow_data_parser.parse(
                  p_content         => {BLOB containing JSON file},
                  p_file_name       => 'test.json') ) ;

LINE_NUMBER COL001    COL002   COL003                                COL004          COL005          
----------- --------- ---------------------------------------------- --------------- --------------
          1 Feature   1.5      41km E of Cape Yakataga, Alaska       1536513727239   1536514117117   
          2 Feature   0.21     11km ENE of Aguanga, CA               1536513299520   1536513521231   
          3 Feature   1.84     5km SSW of Pahala, Hawaii             1536513262940   1536513459610   
          4 Feature   2.55     9km W of Volcano, Hawaii              1536513100890   1536513446680   
          5 Feature   1.3      62km ESE of Cape Yakataga, Alaska     1536512917361   1536513322236   
          6 Feature   1.79     7km SW of Tiptonville, Tennessee      1536512379690   1536512668010   
          7 Feature   1.9      126km NNW of Arctic Village, Alaska   1536512346186   1536512846567   
          8 Feature   1.4      105km NW of Arctic Village, Alaska    1536512140162   1536512846334