Faik Uygur |SmartSoft
2013-07-19 07:47:45 UTC
Hello,
I am using soci version 3.2.1 with Oracle backend. I am using prepared statements. If a single row selecting statement is called with stmt->execute(true); - select after select works but if a multiple row returning select statement is used and I use "stmt->execute(false) while (stmt->fetch()) ..." the second run of execute-fetch cycle does not return any data. Am i missing something or is this a bug in Oracle backend. I looked for something like cursor reset, row reset if maybe needed but couldn't find anything related.
Here is some code that would help to understand the problem:
---
MyClass {
...
private:
shared_ptr<statement> _select;
...
}
void MyClass::setup() {
_select.reset(new statement((_session->prepare << "select "
"guid, status, lastupdated, "
"func_code, dst_host1, dst_port1 "
"from sys_cnn "
"where status = 1",
into(guid), into(status), into(lastupdated),
into(func_code), into(dst_host1), into(dst_port1)
)));
}
bool MyClass::load() {
_select->execute();
while (_select->fetch()) {
// use data returned from each fetch
}
return _session->got_data();
}
----
So first load() call works but second call does not return any rows.
Regards,
Faik Uygur
[cid:***@9636677b.4c9a90d9]
Faik Uygur |SmartSoft
TEKNÄ°K DANIÅMAN, YAZILIM GELÄ°ÅTÄ°RME
TECHNICAL CONSULTANT, SOFTWARE DEVELOPMENT
Ä°Tà AyazaÄa KampÃŒsÃŒ Teknokent ARI3 K:1 NO:102 34469
Maslak Ä°stanbul - TÃŒrkiye www.cardtek.com<http://www.cardtek.com/>
P +90 212 328 3331 F +90 212 285 4093 M
[cid:***@989d0225.4fa7cde2]
Bu e-posta ve muhtemel eklerinde verilen bilgiler kiÅiye özel ve gizli olup, yalnızca mesajda belirlenen alıcı ile ilgilidir.Size yanlıÅlıkla ulaÅmıÅsa lÃŒtfen göndericiye bilgi veriniz, mesajı siliniz ve içeriÄini baÅka bir kiÅiye açıklamayınız, herhangi bir ortama kopyalamayınız.Verilen tÃŒm bilgilerin doÄruluÄu ve bÃŒtÃŒnlÃŒÄÃŒnÃŒn garantisi verilmemekte olup, önceden bildirilmeksizin deÄiÅtirilebilecektir.Bu mesajın içeriÄi Firmamızın resmi görÃŒÅlerini yansıtmayabileceÄinden Kartek Kart ve BiliÅim Teknolojileri Tic.Ltd.Åti. ( SmartSoft ) hiçbir hukuki sorumluluÄu kabul etmez.
I am using soci version 3.2.1 with Oracle backend. I am using prepared statements. If a single row selecting statement is called with stmt->execute(true); - select after select works but if a multiple row returning select statement is used and I use "stmt->execute(false) while (stmt->fetch()) ..." the second run of execute-fetch cycle does not return any data. Am i missing something or is this a bug in Oracle backend. I looked for something like cursor reset, row reset if maybe needed but couldn't find anything related.
Here is some code that would help to understand the problem:
---
MyClass {
...
private:
shared_ptr<statement> _select;
...
}
void MyClass::setup() {
_select.reset(new statement((_session->prepare << "select "
"guid, status, lastupdated, "
"func_code, dst_host1, dst_port1 "
"from sys_cnn "
"where status = 1",
into(guid), into(status), into(lastupdated),
into(func_code), into(dst_host1), into(dst_port1)
)));
}
bool MyClass::load() {
_select->execute();
while (_select->fetch()) {
// use data returned from each fetch
}
return _session->got_data();
}
----
So first load() call works but second call does not return any rows.
Regards,
Faik Uygur
[cid:***@9636677b.4c9a90d9]
Faik Uygur |SmartSoft
TEKNÄ°K DANIÅMAN, YAZILIM GELÄ°ÅTÄ°RME
TECHNICAL CONSULTANT, SOFTWARE DEVELOPMENT
Ä°Tà AyazaÄa KampÃŒsÃŒ Teknokent ARI3 K:1 NO:102 34469
Maslak Ä°stanbul - TÃŒrkiye www.cardtek.com<http://www.cardtek.com/>
P +90 212 328 3331 F +90 212 285 4093 M
[cid:***@989d0225.4fa7cde2]
Bu e-posta ve muhtemel eklerinde verilen bilgiler kiÅiye özel ve gizli olup, yalnızca mesajda belirlenen alıcı ile ilgilidir.Size yanlıÅlıkla ulaÅmıÅsa lÃŒtfen göndericiye bilgi veriniz, mesajı siliniz ve içeriÄini baÅka bir kiÅiye açıklamayınız, herhangi bir ortama kopyalamayınız.Verilen tÃŒm bilgilerin doÄruluÄu ve bÃŒtÃŒnlÃŒÄÃŒnÃŒn garantisi verilmemekte olup, önceden bildirilmeksizin deÄiÅtirilebilecektir.Bu mesajın içeriÄi Firmamızın resmi görÃŒÅlerini yansıtmayabileceÄinden Kartek Kart ve BiliÅim Teknolojileri Tic.Ltd.Åti. ( SmartSoft ) hiçbir hukuki sorumluluÄu kabul etmez.