C++ 在OCCI中创建CLOB以插入数据库

C++ 在OCCI中创建CLOB以插入数据库,c++,oracle10g,clob,occi,C++,Oracle10g,Clob,Occi,我有一些大型数据对象,它们已使用Boost序列化为string/ostringstream。 我希望通过一个过程将这些序列化对象存储在数据类型为CLOB的数据库中。为此,我创建了一个CLOB对象,但我不知道如何“将我的数据放入CLOB(myClob)”中 我看过一些例子,但它们都使用字符指针,我不想走那条胡同 下面是我的C++代码。如果您有任何示例或好的提示/链接,我将非常感谢您的帮助 提前Thx string qOracleDb::testRunStoredProc(const string&

我有一些大型数据对象,它们已使用Boost序列化为string/ostringstream。 我希望通过一个过程将这些序列化对象存储在数据类型为CLOB的数据库中。为此,我创建了一个CLOB对象,但我不知道如何“将我的数据放入CLOB(myClob)”中

我看过一些例子,但它们都使用字符指针,我不想走那条胡同

下面是我的C++代码。如果您有任何示例或好的提示/链接,我将非常感谢您的帮助

提前Thx

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();