2017-08-03 40 views
0

問題CLOB列:我有我想要插入到DB2表使用Rails如何插入大CSV與DB2/Rails的

說明大CSV:該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的解決方案,而不是一般的

+0

什麼是DB2代碼集/代碼頁/地區找到解決此一劈?什麼是應用程序代碼頁? CSV中是否包含非ASCII值轉換爲UTF-8?什麼是DB2服務器操作系統?什麼是DB2服務器版本?目標表是暱稱嗎? – mao

+0

[無法將CLOB數據存儲到DB2中定義的CLOB列中]的可能重複(https://stackoverflow.com/questions/44871254/unable-to-store-clob-data-in-to-clob-defined-column -in-DB2) – mustaccio

回答

0

通過分割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