2016-04-05 18 views
0

上記のコードでは、データベースに挿入された行のIDを取得する方法を示します。助けるためOracleはOCCIとC++を使用して最後に挿入された行IDを取得します

std::stringstream sqlStream(""); 
    sqlStream << "INSERT INTO MYTABLE (COL1, COL2, COL3) VALUES (1, 2, 3) RETURNING ID INTO :my_id_param"; 
    std::string sql(sqlStream.str()); 
    std::cout << sql << std::endl; 

    std::unique_ptr<oracle::occi::Statement> stmt(connection->createStatement()); 
    stmt->execute(sql.c_str()); 

    //??? How can I access here the my_id_param ? 

ありがとう:C++とOracle OCCIインタフェースを使用して - 私。

+0

「ID」列に値を挿入していません。どのように返す値を生成していますか(または 'NULL'値が必要ですか?) 'EACH ROW FOR MYTABLE \t \t \t ON挿入する前に、TRIGGER MYTRIGGER \t \t \tを作成するか、またはREPLACE \t \t \tが \t \t \t \t SELECT MYSEQ.NEXTVAL INTOをBEGIN: – MT0

+0

IDは、配列からの値を生成するトリガであるNEW .ID FROM DUAL; \t \t \t END MYTRIG; ''。うまく動作 - すべてのINSERTのIDが自動的に生成されます。 – Mendes

答えて

0

匿名PL/SQLを使用し、OUTパラメータを登録して結果のIDを取得できます。これはシーケンスで直接動作しますが、私はトリガーで使用されたシーケンスを試していません。

std::stringstream sqlStream(""); 
sqlStream << "BEGIN INSERT INTO MYTABLE (COL1, COL2, COL3) VALUES (1, 2, 3) RETURNING ID INTO :1; END;"; 
std::string sql(sqlStream.str()); 
std::cout << sql << std::endl; 

std::unique_ptr<oracle::occi::Statement> stmt(connection->createStatement(sql.c_str())); 
stmt->registerOutParam(1, oracle::occi::OCCIINT); 
stmt->executeUpdate(); 
int id = stmt->get(1); 
// Use id... 
関連する問題