2017-07-20 1 views
1

RODBCを使用して、新しいテーブル(ローカルデータフレーム)をOracleデータベースに書き込んで試してみます。私が扱っている問題は、フィールドの多くが長さが255文字より長い文字変数であるということです。私は、RODBCビネット当たり、テーブルを初期化するために、このコードを実行した:connodbcConnectSCHEMA.TABLE_NAMEを使用して設定RオブジェクトであるRODBC :: sqlSave()テーブルの作成、警告:列の255バイトに切り捨てられましたか?

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

ローカルデータフレームの名前です。列内の255バイトに切り捨てられ... Rは、警告メッセージが返され、そしてそれらのすべてが

と言った...

RODBCビネットは、文字のVARCHAR(255)への多くのシステムのデフォルトに言及しています。私はconnオブジェクトにsqlTypeInfo()を呼び出すときしかし、それはvarchar2が、私は、文字列を切り捨てず、テーブルとしてデータベースにこのデータフレームを書き込むことができますどのようにCOLUMN_SIZE

4000の を持っていることを言いましたか?私はこのテーブルを手動で作成するために sqlQueryを使用してSQLクエリを書くことができると信じていますが、私は約175のカラムを持ち、すべてのカラムごとに情報を書きたくありません。

答えて

1

RODBCのsqlSave関数を使用してSQL Serverデータベースにデータフレームを書き込むときも同じ問題がありました。

これは、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) 

それでも切り捨て警告が出た場合、500

+0

テーブルが300の変数になる場合はどうなりますか?このアプローチを使用すると、すべての単一の列を指定する必要がありますか? –

+0

hmmmは痛いです。 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)")) 
よりも大きな何かにvarchar型の値を設定してみてください

あなたの関連するすべての列でいっぱいのc(column_name = "varchar(500)")を取得する最も簡単な方法はわかりません

関連する問題