2016-10-17 7 views
0

내 테이블과 로컬 C++ 객체를 패리티 시키려면 Oracle에 새 TYPE을 생성했습니다 (C++ 용 OCCI 인터페이스를 사용하고 있습니다). 코드에서 ORA-00947 : 오라클에 객체를 생성 할 때 값이 충분하지 않습니다.

내가

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); 
+0

'명령문'이란 무엇입니까? 'MyObject' 또는 변수'o'가 문제와 관련이 있습니까? [Minimal, Complete, Verifiable Example] (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)" 

는 예를 들어 오라클 OCCI 워드 프로세서에서 occidml.cpp에서보세요 : 예컨대, 전달 된 각 값에 대해 하나를 나열 할 필요가 있다고 생각합니다.

+0

나는 17 개의 칼럼을 가지고 있으며, 나는 17 번 칼럼을 설정한다. 모든 값이 전달됩니다. – cateof

+0

재미있는 것은 두 문으로 쓰도록 문장을 변경했지만 다음 중 하나도 작동하지 않는다는 것입니다. string sqlStmt = "INSERT INTO MY_TABLE_T (GAME_ID, VERSION) VALUES (: x)"; – cateof

+0

내 대답이 업데이트되었습니다. – DCookie