如何从oracle apex屏幕中的按钮加载csv文件,应该通过plsql处理代码将数据从csv文件读取到表

问题描述 投票:0回答:1

我正在尝试从 oracle apex 屏幕上的按钮上传 csv 文件,我在我的过程中使用了以下 plsql 代码

declare
     l_file_blob  blob;
     l_file_name  BFL_SVC_PROCESS_TRACKER_V24.file_path%type;
begin

   SELECT filename,blob_content
      INTO l_file_name,l_file_blob
      FROM APEX_APPLICATION_TEMP_FILES where name = :P401_SOURCE;

    insert into a  select col001 ,col002
      from 
           table( apex_data_parser.parse(
                      p_content                     => l_file_blob,
                      p_add_headers_row             => 'Y',
                      --
                      p_max_rows                    => 5,
                      p_skip_rows                   => 1,
                      p_csv_col_delimiter           => ';',
                      --
                      p_store_profile_to_collection => 'FILE_PARSER_COLLECTION',
                      p_file_name                   => l_file_name ) ) p;commit;
 end;

但是进入表格的数据如下

1234,abcd,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 

需要使用什么代码来解决这个话题

oracle-apex
1个回答
0
投票

您没有显示文件中的数据,也没有显示您希望如何解析它(对于您的下一篇文章可能是个好主意;))...但看起来您的列是用逗号分隔的,并且您是告诉 API 在此处用分号分隔:

p_csv_col_delimiter           => ';',

我想说这正在按预期工作。由于数据不包含任何分号,因此整行被视为单个列值。尝试使用

p_csv_col_delimiter           => ',',
代替。

这里有一个测试数据是否能正确解析的便捷技巧:

SELECT line_number, col001, col002, col003, col004
  FROM TABLE ( apex_data_parser.parse(
                p_content => apex_util.clob_to_blob(
                  p_clob => 
'
"col1","col2","col3","col4"
1234,abcd,,
'
                 ,p_charset => 'AL32UTF8'
                )
               ,p_file_name => 'emp.csv' /*needed to get the file type*/
               ,p_skip_rows => 1 /*default 0*/
               ,p_csv_col_delimiter => ','
               ) );

LINE_NUMBE COL001     COL002     COL003     COL004    
---------- ---------- ---------- ---------- ----------
         2 1234       abcd                            
© www.soinside.com 2019 - 2024. All rights reserved.