2016-10-17 50 views
0

我在Oracle中创建了一个新的TYPE,以便在我的表和本地C++对象(我正在使用C++的OCCI接口)之间进行奇偶校验。ORA-00947:在Oracle中创建对象时没有足够的值

在代码中我使用

void insertRowInTable() 
    { 

    string sqlStmt = "INSERT INTO MY_TABLE_T VALUES (:x)"; 

    try{ 
    stmt = con->createStatement (sqlStmt); 
    ObjectDefinition *o = new ObjectDefinition(); 

    o->setA(0); 
    o->setB(1); 
    o->setC(2); 
    stmt->setObject (1, o); 
    stmt->executeUpdate(); 
    cout << "Insert - Success" << endl; 
    delete (o); 
    }catch(SQLException ex) 
    { 
     //exception code 
    } 

代码编译,连接到数据库,但会引发以下异常

异常抛出的insertRow错误号:947 ORA-00947:没有足够的 值

我有问题的“sqlStmt”吗?语法或绑定有问题吗?

当然,我已经建立了环境和连接

env = Environment::createEnvironment (Environment::OBJECT); 
    occiobjm (env); 
    con = env->createConnection (user, passwd, db); 
+0

什么是'语句'? “MyObject”或变量“o”与你的问题有什么关系?请尝试创建[最小化,完整和可验证示例](http://stackoverflow.com/help/mcve)并向我们显示。 –

+0

我增加了更多的代码。 ObjectDefinition由OTT生成,我想将序列化的对象存储在表中。 – cateof

回答

0

多少列在表中?该错误消息表明您没有在插入语句中提供足够的值。如果只提供VALUES子句,则必须提供表中的所有列。否则,你需要列出每个你提供值的列的:

string sqlStmt = "INSERT INTO MY_TABLE_T (x_col) VALUES (:x)"; 

编辑: 值子句上市占位符参数。我认为你需要列出一个对于传递的每个值,例如:

string sqlStmt = "INSERT INTO MY_TABLE_T (GAME_ID, VERSION) VALUES (:x1,:x2)" 

拥有在Oracle OCCI文档为例来看看occidml.cpp

+0

我有17栏,我设置o->设置... 17次。所有的值都被传递。 – cateof

+0

有趣的是,我改变了写入两列的语句,但没有工作:string sqlStmt =“INSERT INTO MY_TABLE_T(GAME_ID,VERSION)VALUES(:x)”; – cateof

+0

更新了我的答案。 – DCookie

相关问题