2017-07-20 38 views
1

我正在使用RODBC來嘗試將新表(本地數據框)寫入Oracle數據庫。我正在處理的問題是,許多字段都是字符變量,長度超過255個字符。我跑這個代碼來初始化該表中,每RODBC暈影:RODBC :: sqlSave()創建表,警告:在列中截斷爲255個字節?

sqlSave(channel=conn, dat=SCHEMA.TABLE_NAME) 

哪裏conn是設置使用odbcConnectSCHEMA.TABLE_NAME R對象是本地數據幀的名稱。 [R返回警告消息,並且他們都表示,

...截斷爲255個字節的列...

RODBC小品提到了很多系統默認爲varchar(255)字符。然而,當我打電話conn對象sqlTypeInfo(),它說,varchar2有4000

一個COLUMN_SIZE我怎麼能寫這個數據幀到數據庫中的表,不截斷的字符串?我相信我可以使用sqlQuery手動創建此表來編寫SQL查詢,但我有大約175列,並且不想爲每一列寫出信息。

回答

1

在使用RODBC中的sqlSave函數將數據框寫入sql服務器db時,我遇到了同樣的問題。

這是通過設置列類型以在運行sqlSave命令之前獲取更多數據來解決的。我用varchar(500),它做到了。

如果您正在創建從包含長字符串的單個R列一個表,這是對我工作:

sqlQuery<-c('CREATE TABLE YourTable (ColumnName varchar(500));') 
    channel <- odbcConnect("YourTable") 
    sqlQuery(channel, paste(sqlQuery)) 
    close(channel) 

之後寫入使用sqlSave該表應該工作:

sqlSave(odbcConnect("YourTable"),dataFrame,append=TRUE) 

如果仍然出現截斷警告,試圖將varchar值設置爲一些大於500

+0

如果我的表要變成300變量,該怎麼辦?使用這種方法,我需要指定每一列嗎? –

+0

嗯聽起來很痛苦。如何嘗試使用sqlQuery <-c('CREATE TABLE YourTable',paste0('(ColumnName',seq(1:300),'varchar(500));')) – AlvaroFV

0
sqlsave(channel=conn, dat=SCHEMA.TABLE_NAME, varTypes=c(column_name="varchar(500)")) 

儘管我不確定獲取c(column_name =「varchar(500)」)的所有相關列的最簡單方法是什麼