2016-04-05 11 views
0

Angesichts der Code oben, wie kann ich die ID der Zeile in die Datenbank eingefügt. Ich benutze C++ und Oracle OCCI-Schnittstelle:Oracle erhalten zuletzt eingefügten Zeile ID mit OCCI und C++

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 ? 

Vielen Dank für Ihre Hilfe.

+0

Sie fügen keine Werte in eine 'ID'-Spalte ein. Wie generieren Sie den zurückzugebenden Wert (oder erwarten Sie einen "NULL" -Wert)? – MT0

+0

ID ist ein Trigger, der Werte von einem SEQUENCE erzeugt: CREATE OR REPLACE TRIGGER MyTrigger \t \t \t BEFORE INSERT ON MYTABLE \t \t \t FÜR JEDE ZEILE \t \t \t BEGIN \t \t \t \t SELECT MYSEQ.NEXTVAL INTO: NEW .ID VON DUAL; \t \t \t END MYTRIG; ''. Funktioniert gut - für jeden INSERT wird die ID automatisch generiert. – Mendes

Antwort

0

Sie können anonymes PL/SQL verwenden und einen OUT-Parameter registrieren, um die resultierende ID zu erfassen. Das funktioniert mit einer Sequenz direkt, ich habe es nicht mit einer Sequenz in einem Trigger versucht.

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... 
Verwandte Themen