0

まず、postgresql から一連のレコードを返す次の R コマンドを実行しています。

col_qry <- paste("select column_name from table1",sep="")
rs_col <- dbSendQuery(r,col_qry)
temp_list <- fetch(rs_col,n=-1)

返されたデータは、R を使用して印刷すると次の形式で表示されます。print(temp_list)

          column_name
1         col1
2         col2
3         col3
4         col4

この返されたデータに基づいて、次のような別のSQLステートメントを生成したいと思います

copy (select "col1","col2","col3","col4" from table2 )

私がこれをするとき

tmp_cp <- paste("copy (select ",col_list,",","from table2",sep="")

これを印刷すると、1つのステートメントtmp_cpの代わりに一連のステートメントが印刷されます。select内の列名ごとに1つずつ、このように選択しますcopycopy

copy (select col1 from table2 )
copy (select col2 from table2 )
copy (select col3 from table2 )
copy (select col4 from table2 )
and so on...

copyすべての列名が一緒に言及され、それぞれが で引用され、""で区切られた1 つのステートメントのみが必要です,。どうやってやるの?

更新:これらのステートメントを使用しているとき

col_list <- toString(shQuote(temp_list$column_name))

tmp_cp <- paste("copy (select ",col_list,",","from table2",sep="")

次に、1 つのステートメントのみが生成されますが、列名は次のように二重引用符ではなく単一引用符で囲まれています。

copy (select 'col1','col2','col3','col4' from table2 )

注:上記で 4 つの列について言及しましたが、4 つの列しかないというわけではありません。

4

2 に答える 2

1

これを試して:

library(gsubfn)
sql <- fn$identity(
  "select `toString(shQuote(temp_list$column_name, 'cmd'))` from table2"
)

与える:

> sql
[1] "select \"col1\", \"col2\", \"col3\", \"col4\" from table2"

> cat(sql, "\n")
select "col1", "col2", "col3", "col4" from table2 

これも機能し、パッケージは必要ありません。

sprintf("select %s from table2", 
   toString(shQuote(temp_list$column_name, 'cmd')))
于 2014-07-22T22:08:20.807 に答える
0

引数pasteでネスト:collapse

paste("copy (select", paste(cols, collapse=", "), "from table2)")

列名を引用したい場合:

paste("copy (select", paste(shQuote(cols, "cmd"), collapse=", "), "from table2)")
于 2014-07-23T00:51:32.850 に答える