上一篇文章介绍了APEX中上传文件的方式,以纯文本文件为例说明了如何对上传的文件进行后续处理。PL/SQL可以直接对纯文本内容进行处理,那么如果直接上传xls二进制文件呢?通常,可以用Java Procedure做这件事,但是自APEX Listener 1.x 发布后,有更简单的方式实现对xls内容的处理。

1.10 版本之后,apex-config.xml 中多了下面这个参数:


false

将该参数设置为true则开启excel到collection的转换功能,简单设置步骤如下:
1. 添加File Browse…的Page Item,名字为P1_FILENAME,Storage Type 为 WWV_FLOW_FILES
2. 添加名为UPLOAD的Button Item,Button Request 设置为 xls2collection

运行该页面,选择一个xls后缀的Excel文件,点击UPLOAD按钮即可上传该Excel文件。

上传的文件和数据分别存放在wwv_flow_files和apex_collections中。其中COLLECTION_NAME的默认名称为Page Item的名称,此例中为P1_FILENAME,C001为Excel的TAB页名称,接下来的各字段为表格内容。

SELECT * FROM apex_collections a WHERE a.collection_name = 'P1_FILENAME'

apex_collections是视图,限制了security_group_id,你需要在应用程序中,并且是当前会话中使用。

删除Collection方式为:

apex_collection.delete_collection(p_collection_name => 'P1_FILENAME');

详细说明可参考APEX 4.0的API Reference文档中的APEX_COLLECTION章节。

有了APEX Listener,很多事情变得更简单了,当然,除了文档,APEX的文档令人吃惊的简单,很多内容都没有提及。