随着libpqxx,有可能是一个准备语句exec
秒,但至今尚未commit
特德存储在结果result
在后来准备语句的使用?
如果是这样,怎么可以这样做?
码
我已经剥离下来的可读性,但实际上,这就是我想要做的事:
void prepare_write_parent_table(connection_base &c){
try
{
c.prepare("write_parent_table",
"INSERT INTO parent_table (column_1) "
"SELECT $1 "
"RETURNING id"
)
("character", pqxx::prepare::treat_string);
}
catch (const exception &e)
{
cerr << e.what() << endl;
}
}
string write_parent_table(transaction_base &t, string data){
try
{
result parent_table_result = t.prepared("write_parent_table")(data).exec();
return parent_table_result[0][0].c_str();
}
catch (const exception &e)
{
cerr << e.what() << endl;
return "";
}
}
void prepare_write_child_table(connection_base &c){
try
{
c.prepare("write_child_table",
"INSERT INTO child_table (parent_table_id, column_a) "
"SELECT $1, $2 "
)
("character", pqxx::prepare::treat_string)
("character", pqxx::prepare::treat_string);
}
catch (const exception &e)
{
cerr << e.what() << endl;
}
}
在return
从write_parent_table
进行检查,看if( == "")
如果不是,则进入; 否则,我会commit
有让它失败或更优选如果可能的话取消交易; 不过,我还不知道该怎么做,如果它甚至有可能。
总是会有一个不确定的量的INSERT
s转换child_table
每parent_table
INSERT
。