用于处理来自 CLOB 的 CSV 的 Oracle PL/SQL 包/过程

Posted

技术标签:

【中文标题】用于处理来自 CLOB 的 CSV 的 Oracle PL/SQL 包/过程【英文标题】:Oracle PL/SQL package/procedure for processing CSV from CLOB 【发布时间】:2013-04-30 16:23:48 【问题描述】:

我允许用户通过 OHS/mod_plsql 上传 .csv 文件。该文件在数据库中保存为 BLOB 文件,然后我将其转换为 CLOB。然后我想获取这个 CLOB 文件的内容并将其内容保存到一个表中。我已经有一些工作代码可以根据行尾拆分文件,然后将每个结果字符串沿逗号拆分并插入记录。

我需要一种方法来处理 CSV 中的字符串包含在双引号中并包含逗号的情况。例如:

col1,col2,col3,col4 一些,文本,更多,文本 this,text,has,"逗号、分号和句点"

我的代码将知道如何处理第二行,但不知道如何处理第三行。有没有人有一些代码足够聪明,可以将“逗号、分号和句点”视为单个标记?我可能可以一起破解一些东西,但我对我的正则表达式技能不够信任,而且我认为其他人可能已经写了一些愿意分享的东西。

【问题讨论】:

解析双引号分隔字符串的代码是否还需要处理作为单元格内容一部分的转义双引号?我想知道使用UTL_FILE 将文件写入磁盘是否更容易,将其作为外部表加载,然后删除文件。不过,使用这样的文件系统似乎很奇怪。 快速搜索一下this,这可能会给你一些想法。 我大概可以使用那个例子。我还不确定我们将收到的 CSV 的格式,但我只需要规定他们的文件中不能有双引号,除了在分隔字符串时使用的那些。 【参考方案1】:

Alexandria PL/SQL 库中有一个很好的 CSV 解析器 - CSV_UTIL_PKG。

https://code.google.com/p/plsql-utils/

更多信息:

http://ora-00001.blogspot.com.au/2010/04/select-from-spreadsheet-or-how-to-parse.html

【讨论】:

天哪,我以前怎么没见过那个页面?那有我可以使用的各种库。谢谢!

以上是关于用于处理来自 CLOB 的 CSV 的 Oracle PL/SQL 包/过程的主要内容,如果未能解决你的问题,请参考以下文章

从 Oracle 表中提取 300,000 个字符的 CLOB 到 CSV

来自大型无序 csv 文件的 dask set_index

[python] python 读写Oracle clob类型数据的处理

jdbc—CLOB和BLOB

JDBC处理mysql大数据

如何在 R 中加入来自 2 个不同 csv 文件的数据?