1
sqlite上で実行する必要があるトランザクションがあります。トランザクションにはいくつかのクエリが含まれています。別々に(行ごとに)構築すると動作しますが、dbSendQueryをn回呼び出す必要があります。それはコードをかなり遅くします。R RSQLiteを使用する場合の複数行文
理想的なコードは次のようになりますが、複数行のクエリは失敗します。トランザクションを処理するためにdbBegin()
とdbCommit()
(すべてのエラーのためdbRollback
/ワット):
library("RSQLite")
con <- dbConnect(RSQLite::SQLite(), dbname="test.db")
dbSendQuery(con, paste("CREATE TABLE Variables (Name TEXT PRIMARY KEY, RealValue REAL, IntegerValue INTEGER, BlobValue BLOB, TextValue TEXT)"))
dbSendQuery(con, paste("INSERT INTO Variables (Name) VALUES ('newid');"))
dbSendQuery(con, paste("BEGIN IMMEDIATE TRANSACTION;",
"UPDATE Variables SET TextValue = '0' WHERE Name = 'newid';",
"UPDATE Variables SET RealValue = 0 WHERE Name = 'newid';",
"UPDATE Variables SET IntegerValue = 0 WHERE Name = 'newid';",
"COMMIT;",sep=" "))
a <- dbFetch(dbSendQuery(con, paste("SELECT * FROM _Variables;")))
dbSendQuery(con, paste("COMMIT;"))
dbBeginとdbCommitは私が後だったまさにです! UPDATEを組み合わせることはできますが、複数の選択肢があります。実際、Variableテーブルは変数に使用する一時テーブルです。 – Michael
素晴らしい!お役に立てて嬉しいです。最も速く受け入れられる答えの1つ。インクは乾いていませんでした! – Parfait