2016-04-05 17 views
0

Yukarıdaki kod verildiğinde, veritabanına eklenen satırın kimliğini nasıl alabilirim. Ben C++ ve oracle OCCI arabirimini kullanıyorum:Oracle, OCCI ve C++ ile son eklenen satır kimliğini elde edin

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 ? 

Yardımlarınız için teşekkürler.

+0

Değerleri bir "ID" sütununa eklemiyorsunuz. Geri dönüş değerini nasıl üretiyorsunuz (veya bir "NULL" değerini bekliyorsunuz)? 'HER ROW MyTable \t \t \t AÇIK INSERT ÖNCE MANDALLAMA MyTrigger \t \t \t CREATE OR REPLACE \t \t \t \t \t \t \t SEÇ MYSEQ.NEXTVAL INTO BEGIN: – MT0

+0

kimliği bir DİZİSİNİN değerleri üretir TRIGGER olan YENİ DUAL; \t \t \t END MYTRIG; ''. İyi çalışır - her INSERT için kimlik otomatik olarak oluşturulur. – Mendes

cevap

0

Anonim PL/SQL kullanabilir ve sonuç kimliğini yakalamak için bir OUT parametresi kaydedebilirsiniz. Bu doğrudan bir diziyle çalışır, bir tetikleyicide kullanılan bir diziyle denemedim.

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... 
İlgili konular