Выполнить PL / SQL-скрипт на C ++ с помощью OCCI oracle

0

Я хочу запустить 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, они, похоже, терпят неудачу. Я хочу сделать это, потому что я хочу реализовать откат. Что мне не хватает? Может ли кто-нибудь предложить любую альтернативу для его реализации.

  • 0
    просто выведите оператор sql и запустите его напрямую в инструменте, похожем на sqlplus, чтобы проверить, работает ли он.
Теги:
plsql
sql-scripts
occi

1 ответ

0

Есть ; отсутствует после ROLLBACK TO sp_1

  • 0
    Я пропустил ; пока переписываю. Вот и все. Спасибо за ответ, но проблема все еще сохраняется.
  • 0
    Кстати, вы могли бы избавиться от rollback_check_counter (здесь ничего полезного не делается) и части WHEN PROGRAM_ERROR THEN , поскольку блок WHEN OTHERS THEN делает то же самое.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню