Я хочу запустить SQL-скрипт из программы C++. мой код выглядит следующим образом:
int main()
{
//.....
sql_stmt = "Insert into t1 values ('qwerty');\nInsert into t1 values ('dothar');"
"//and many more INSERT statements";
sql_stmt = "DECLARE\nrollback_check_counter number;\n"
"BEGIN\n"
"rollback_check_counter :=1;\n"
"SAVEPOINT sp_1;\nIF rollback_check_counter = 1 THEN\n"
"BEGIN\n"+sql_stmt+"EXCEPTION\n"
"WHEN PROGRAM_ERROR THEN\n"
"rollback_check_counter :=0;\n"
"ROLLBACK TO sp_1;\n"
"WHEN OTHERS THEN\n"
"rollback_check_counter :=0;\n"
"ROLLBACK TO sp_1;\n"
"END;\n"
"END IF;\n"
"commit;\n"
"END;";
try
{
Connection *conn = env->createConnection(user,passwd); //error prone
Statement *stmt = conn->createStatement();
stmt->setSQL(sql_stmt);
row_count = stmt->execute(); //stmt->execute(sql_stmt);
Connection::conn->terminateStatement(Statement *stmt);
//con->terminateStatement(stmt);
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
}
catch(SQLException& ex)
{}
//.....
return 0;
}
Хотя, когда я запускаю эту инструкцию insert только, они довольно хорошо работают, но когда я формирую структуру SQL Script, они, похоже, терпят неудачу. Я хочу сделать это, потому что я хочу реализовать откат. Что мне не хватает? Может ли кто-нибудь предложить любую альтернативу для его реализации.
Есть ;
отсутствует после ROLLBACK TO sp_1
rollback_check_counter
(здесь ничего полезного не делается) и части WHEN PROGRAM_ERROR THEN
, поскольку блок WHEN OTHERS THEN
делает то же самое.