【问题标题】:How to create table dynamically based on the uploaded csv file column header using oracle apex如何使用oracle apex根据上传的csv文件列标题动态创建表
【发布时间】:2014-02-05 14:34:55
【问题描述】:
基于 csv 文件列标题,它应该动态创建表,并将该 csv 文件的记录插入到新创建的表中。
例如:
1) 如果我上传一个包含 3 列的文件 TEST.csv,它应该动态创建一个包含三个列的表
2)如果我再次上传一个名为 TEST2.csv 的新文件,它有 5 列,它应该动态创建一个有 5 列的表。
每次都应该根据上传的csv文件头创建一个表..
如何在 oracle APEX 中实现这一点..
提前致谢..
【问题讨论】:
标签:
oracle
csv
plsql
oracle-apex
【解决方案1】:
在不创建新表的情况下,您可以使用可以从中选择的 TABLE 函数将 CSV 视为表。如果你从the Alexandria Project 下载包,你会发现一个函数可以在 CSV_UTIL_PKG 中完成这个任务(clob_to_csv 是这个函数,但你会在这里找到其他好东西)。
您只需上传 CSV 并将其存储在 CLOB 列中,然后您就可以使用 CSV_UTIL_PKG 代码在其上构建报告。
如果您必须为上传创建一个新表,您仍然可以使用此解析器。上传文件,然后只选择第一行(例如 SELECT * FROM csv_util_pkg.clob_to_csv(your_clob) WHERE ROWNUM = 1)。您可以使用 APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY 将此行插入到 Apex 集合中,以便轻松遍历每一列。
您需要确定每列的数据类型,但可以对所有内容都使用 VARCHAR2。
但是,如果您只是使用通用列,则可以轻松地将一个附加列存储为该记录集合的名称,并将所有上传的内容存储在同一个表中。只需构建另一个表来存储列名。
【解决方案2】:
如果结构是“动态的”,只需将此文件存储为 BLOB。
您也可以在此用例中使用 XML 数据类型,但它与 BLOB 列没有太大区别。
从 11g 开始就有 SecureFile 特性,它是一个新的 BLOB 实现,它比常规 BLOB 执行得更好,它适用于非结构化或半结构化数据。