2017-04-13 7 views
2

私のRワークフローでは、多くのクエリ(RPostgreSQLライブラリ)を扱うようになりました。私は本当にコードを今後も維持管理しやすくしたいと思っています。SQLスクリプトの実行中に動的値を使用する方法R

別の.SQLファイル(thisが助けられました)から大規模なクエリを読み込み始めました。

は、その後、私はsqlInterpolate(ANSI(), query, value = "stackoverflow")を使用して、それを補間私が(Rにそれをロードした後)

SELECT * FROM table WHERE value = ?my_value; 

とを書くことができることを意味している(thatを助けた)補間値を使用して開始しました。今、何が起こる

私はこの

SELECT count(*) FROM ?my_table; 

のようなものを使用したいされているが、どのように私はそれを動作させることができますか? sqlInterpolate()はデフォルトで安全に補間するだけです。回避策はありますか?

おかげ

答えて

0

sqlInterpolate()だけでなく、他のコンポーネントのテーブル名のように値を代入するためのものです。 brewwhiskerなどの他のテンプレートフレームワークを使用することもできます。 ?DBI::SQL

0

、あなたが読むことができます:

をデフォルトでは、すべてのユーザーがクエリに入力を与え、それ がテーブルまたは変数名を参照するかどうかに応じて、 dbQuoteIdentifier()またはdbQuoteString()のいずれかを使用して、またはエスケープする必要がありますリテラル文字列です。

また、this page上:あなたがフィルタリングするどの列を選択するためのユーザ入力に依存するテーブルまたは を作成している場合

またdbQuoteIdentifier()が必要な場合があります。

だからあなたが使用することができます。

sqlInterpolate(ANSI(), 
       "SELECT count(*) FROM ?my_table", 
       my_table = dbQuoteIdentifier(ANSI(), "table_name")) 
# <SQL> SELECT count(*) FROM "table_name" 
関連する問題