私は、あるユーザをあるテーブルに更新し、そのユーザに属する別のユーザのデータを削除するトランザクションを作成しています。しかし、最初のクエリだけが実行され、2番目のクエリは実行されません。 2番目のクエリのdeleteステートメントでは、code
はコンマで区切られたstd :: stringです。delete文がpostgresqlで実行されていません
pqxx::connection c(connectionString);
try {
pqxx::work w(c);
pqxx::result r;
c.prepare("user", "update user set started = null, finished = null, task = $1 where id = $2");
r = w.prepared("user")(task)(email).exec();
c.prepare("belongings", "delete from belongings where id in " \
"(select id from info where code in ($1) and id = $2)");
r = w.prepared("belongings")(code)(id).exec();
w.commit();
}
私はcommit()の前に複数のクエリを実行する方法を説明するthis SOスレッドを読んでいます。だから私は2番目の削除ステートメントで間違いをしている必要がありますが、理由を見つけることができません。
'belongings.codeの種類は何?'またcode'変数 'への割り当てを示しています。 – klin
これはあなたの質問に答えることはできませんが、あなたはそのすべてを関数にラップして関数を実行することができます。これは、最初のステートメントが失敗した場合、2番目のステートメントを実行しない(トランザクションは同じことを達成することができますが)という追加の利点があります。 – Hambone
@klin belongsings.codeは表のvarcharです。コードは 'abc'、 'def'、 'ghi'のようなstd :: stringです。私は最初にIN句に制限があると考えましたが、そうでないようです。 – kometen