ORA-00947: 在 Oracle 中创建对象时值不足

Posted

技术标签:

【中文标题】ORA-00947: 在 Oracle 中创建对象时值不足【英文标题】:ORA-00947: not enough values when creating object in Oracle 【发布时间】:2016-10-17 12:04:20 【问题描述】:

我在 Oracle 中创建了一个新的 TYPE,以便在我的表和本地 c++ 对象之间进行奇偶校验(我正在使用 C++ 的 OCCI 接口)。

在我使用的代码中

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
    

代码编译,连接到db但抛出以下异常

insertRow 抛出异常错误号:947 ORA-00947:不够 价值观

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

当然我已经搭建好了环境和连接

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

【问题讨论】:

什么是statementMyObject 或变量 o 与您的问题有什么关系?请尝试创建Minimal, Complete, and Verifiable Example 并展示给我们。 我添加了更多代码。 ObjectDefinition 由 OTT 生成,我想将序列化的对象存储在表中。 【参考方案1】:

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

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

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

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

查看 Oracle OCCI 文档中的 occidml.cpp 示例。

【讨论】:

我有 17 列,我设置了 o->set... 17 次。所有值都被传递。 有趣的是,我将语句更改为写入两列但也不起作用:string sqlStmt = "INSERT INTO MY_TABLE_T (GAME_ID, VERSION) VALUES (:x)"; 更新了我的答案。

以上是关于ORA-00947: 在 Oracle 中创建对象时值不足的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 选择变量,错误 ORA-00947 没有足够的值

向Oracle数据库插入数据时提示 ora-00947: 没有足够的值

向oracle数据库中添加数据时提示ORA-00947: 没有足够的值

oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下:

oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下:

ORA-00947: 将值放入过程中的类型时没有足够的值