我正在尝试从 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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
需要使用什么代码来解决这个话题
您没有显示文件中的数据,也没有显示您希望如何解析它(对于您的下一篇文章可能是个好主意;))...但看起来您的列是用逗号分隔的,并且您是告诉 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