APEX_COLLECTION上传Excel至集合:文件浏览项参数设置疑问
APEX Excel上传至集合的参数配置解决方案
核心问题修正与参数说明
你的代码存在两处关键问题:查询语句的语法错误,以及CREATE_COLLECTION_FROM_QUERY_B中绑定变量参数的配置逻辑。以下是修正后的代码和清晰的参数解释:
修正后的完整代码
declare l_query clob; begin -- 移除原查询末尾冗余的右括号,修正语法错误 l_query := 'select * from apex_application_temp_files f, table( apex_data_parser.parse( p_content => f.blob_content, p_file_name => f.filename, p_skip_rows => 1 ) ) p where f.name = :P14_UPLOAD'; APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B ( p_collection_name => 'IMPORT', p_query => l_query, p_truncate_if_exists => 'YES', -- 传入不带冒号的绑定变量名,转成APEX兼容的表类型 p_names => apex_util.string_to_table('P14_UPLOAD'), -- 传入页面项P14_UPLOAD的实际值,转成表类型 p_values => apex_util.string_to_table(:P14_UPLOAD) ); end;
参数配置详解
p_names:这个参数是用来告诉APEX查询语句中用到的绑定变量名称,必须传入不带冒号的变量名(即查询里的:P14_UPLOAD去掉冒号后的P14_UPLOAD)。因为APEX要求该参数为表类型,所以用apex_util.string_to_table将单个字符串转换为符合要求的表结构。p_values:这个参数对应绑定变量的实际值,直接引用页面项:P14_UPLOAD即可(文件上传后,该项会存储临时文件的名称),同样用apex_util.string_to_table转成表类型。
额外提醒
- 确认页面项
P14_UPLOAD的类型是文件浏览项,且已开启文件上传功能,允许Excel格式(.xlsx/.xls) - 这段代码要放在用户上传文件之后执行的进程里(比如点击“导入”按钮触发的后台进程)
- 如果Excel包含多个工作表,需要在
apex_data_parser.parse中添加p_sheet_number或p_sheet_name参数指定要解析的工作表,默认会读取第一个工作表
内容的提问来源于stack exchange,提问作者nasim
相关产品推荐
相关产品推荐

