Создание CLOB в OCCI для вставки в базу данных

У меня есть несколько больших объектов данных, которые были сериализованы в строку / ostringstream с использованием Boost.
Я хотел бы сохранить эти сериализованные объекты в базе данных с типом CLOB через процедуру. Для этого я создаю объект CLOB, но я не знаю, как «поместить мои данные в CLOB (myClob)».

Я видел несколько примеров, но все они используют символьные указатели, и я бы предпочел не идти по этому переулку …

Ниже приведен мой код на C ++. Если у вас есть примеры или хорошие советы / ссылки, я был бы очень признателен за любую помощь.

Спасибо заранее

string qOracleDb::testRunStoredProc(const string& xId, const qTime date, const string& xUsage, int type, const std::ostringstream& data)
{
try
{
Clob myClob;
myClob.setEmpty();

myClob ?????

myStmt=myConn->createStatement("BEGIN DATA.SAVE_DATA_TEMP( :1, :2, :3, :4, :5); END;");

Date asofDate(myEnv, date.year(), date.month(), date.day(),0,0,0);
myStmt->setDate(1, asofDate);
myStmt->setString(2,xId);
myStmt->setString(3,xUsage);
myStmt->setInt(4, type);
myStmt->setClob(5, myClob);

myStmt->execute();
}

catch(SQLException ex)
{
// close nicely
myConn->terminateStatement (myStmt);
return "Exception thrown : "+ ex.getMessage()+", " + qStringUtils::toString(ex.getErrorCode());
}
// close nicely
myConn->terminateStatement (myStmt);
return "succes";
}

ОБНОВЛЕНИЕ: Поскольку я нашел примеры кода, которые решили мои проблемы, я хотел бы поделиться решением, так как кто-то еще может столкнуться с этой «проблемой» однажды.
Моя переменная данных изменилась с потока на строку, и мой код такой:

/* Create dummy-clob in DB and insert data */
myStmt = myConn->createStatement("begin dbms_lob.createtemporary(:p1,FALSE);end;");
myStmt->registerOutParam(1,OCCICLOB);
myStmt->executeUpdate();

Clob resClob = myStmt->getClob(1);
resClob.write((unsigned int)data.size(), (unsigned char*)data.c_str(),(unsigned int)data.size());
myConn->terminateStatement (myStmt);myStmt=myConn->createStatement("BEGIN DATA.SAVE_NOUVO_DATA( :1, :2, :3, :4, :5); END;");

Date asofDate(myEnv, date.year(), date.month(), date.day(),0,0,0);
myStmt->setDate(1, asofDate);
myStmt->setString(2,xId);
myStmt->setString(3,xUsage);
myStmt->setInt(4, type);
myStmt->setClob(5, resClob);

myStmt->execute();

8

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]