【问题标题】:How to insert large CSV into a CLOB column with DB2/Rails如何使用 DB2/Rails 将大型 CSV 插入 CLOB 列
【发布时间】:2017-08-03 19:43:52
【问题描述】:

问题:我有一个大的 CSV,我想用 Rails 插入到 DB2 表中

描述:CSV 大约有 2k 行/8K 个字符。 CLOB 列设置为处理超过 10K 个字符。通过 RubyMine 数据库控制台,我可以很好地插入 CSV。但是我的应用程序崩溃了。

ActiveRecord 产生一个巨大的插入查询。代码:

Logger.create(csv: csv_data.to_s)

DB2 返回错误:

 ActiveRecord::JDBCError: [SQL0102] String constant beginning with 'foobar' too long.

我可以使用类似的代码将巨大的 PDF 文件插入到 BLOB 列中。我尝试先创建记录,然后用数据更新它,没有区别。

这个问题和this一样。除了我需要 Rails 解决方案,而不是一般的解决方案

【问题讨论】:

  • 什么是 DB2 代码集/代码页/区域?什么是应用程序代码页? CSV 是否包含转换为 UTF-8 的非 ASCII 值?什么是 DB2 服务器操作系统? DB2 服务器版本是什么?目标表是昵称吗?

标签: ruby-on-rails db2 clob


【解决方案1】:

通过将csv_data 拆分成块并将它们附加到列中找到了解决此问题的方法

update_attribute(:csv, '') if self.csv.nil? # Can't CONCAT to nil

# Split csv_data into chunks, concatenate each one to the field
csv_data.scan(/.{1,6144}/m).each do |part|
  parm =  ActiveRecord::Base.connection.quote(part)
  ActiveRecord::Base.connection.execute("update #{Logger.table_name} set csv = CONCAT(csv, #{parm}) where id = #{self.id}")
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2018-08-05
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多