如何使用oracle apex基于上传的csv文件列标题动态创建表

时间:2014-02-05 14:34:56

标签: oracle csv plsql oracle-apex

基于csv文件列标题,它应该动态创建表,并将该csv文件的记录插入到新创建的表中。 例如:

1)如果我上传一个包含3列的TEST.csv文件,它应该动态创建一个包含三个的表 2)如果我上传一个名为TEST2.csv的5列新文件,它应该动态创建一个包含5列的表。

每次都应该根据上传的csv文件头创建一个表..

如何在oracle APEX中实现这一目标..

先谢谢..

2 个答案:

答案 0 :(得分: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。

但是,如果您只是使用通用列,则可以轻松地将一个添加列存储为此记录集的名称,并将所有上载存储在同一个表中。只需构建另一个表来存储列名。

答案 1 :(得分:0)

如果结构是“动态的”,只需将此文件存储为BLOB即可。 您也可以将XML数据类型用于此用例,但它与BLOB列没有太大区别。 自11g以来有一个SecureFile功能,它是一个新的BLOB实现,它比常规BLOB表现更好,非常适合非结构化或半结构化数据。