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();
}
나는() 여러 쿼리 이전에 커밋 실행하는 방법을 설명하는
this SO-스레드를 읽어 보시기 바랍니다. 따라서 두 번째 delete 문에서 실수를해야하지만 이유를 찾을 수 없습니다.
의 대체 구문을 사용하려고 할 수 있는가? '또한 code' 변수'에 할당을 보여줍니다. – klin
이 질문에 대한 대답은 아니지만 함수의 모든 내용을 래핑하고 함수를 실행할 수 있습니다. 이것은 첫 번째 명령문이 실패한 경우 두 번째 명령을 실행하지 않을 것이라는 추가 이점을 갖게됩니다 (트랜잭션이 동일한 것을 성취 할 수는 있지만). – Hambone
@klin belongsings.code는 테이블의 varchar입니다. 그리고 코드는 'abc', 'def', 'ghi'와 같은 std :: string입니다. 처음 엔 IN 절에 한계가 있다고 생각했지만 그럴 가능성은 낮습니다. – kometen