Вставка нескольких строк в базу данных Oracle с помощью OCCI - PullRequest
2 голосов
/ 28 декабря 2010

Это мой первый опыт, поэтому OCCI, поэтому я прошу прощения, если ответ очевиден.

У меня есть объект Statement, созданный обычным способом:

string sqlStatement = "INSERT INTO data_tab VALUES(:id, :name, :number, :when)";
m_stmt = m_conn->createStatement(sqlStatement);

m_stmt->setMaxIterations(100);

Тогда мне нужнозациклить несколько объектов, которые я должен вставить в базу данных:

for(size_t i = 0; i < data.size(); ++i)
{
    m_stmt->setInt(1, i);

    try {
        m_stmt->setString(2, data[i].client());
    }
    catch(SQLException& e)
    {
        cerr << "setString(): " << e.what();
        exit(1);
    }

    m_stmt->setDouble(3, data[i].number());
    m_stmt->setDate(4, data[i].when());

    // ...
    // Checks if maxIterations is lesser than data size,
    // oteherwise calls executeUpdate and other kind of
    // boilerplate code.
    // ...

    m_stmt->addIteration();
}

Но код работает в методе setString со следующим выводом:

setString(): ORA-32132: maximum iterations cannot be changed

Я считаю, что должен получитьэта ошибка я вызываю setMaxIterations после метода setXXX, но я не делаю этого.Что я делаю не так?

1 Ответ

3 голосов
/ 28 декабря 2010

Вы должны вызвать setMaxParamSize() до установки параметра переменной длины:

m_stmt->setMaxParamSize(2, 1000) // or whatever is the max length of your string.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...