代码之家  ›  专栏  ›  技术社区  ›  Ruslan

如何使用DB2/Rails将大型CSV插入CLOB列

  •  1
  • Ruslan  · 技术社区  · 8 年前

    描述: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.
    

    this 除非我需要一个Rails解决方案,而不是通用的解决方案

    1 回复  |  直到 8 年前
        1
  •  1
  •   Ruslan    8 年前

    通过拆分 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