Bonjour à tous,

j'ai un bout de code faisant appel à OCI et qui fonctionne bien lorsqu'on lui passe un "select", mais qui bloque quand on lui passe un update. Dans ce dernier cas, la fonction OCIStmtExecute coince, donc l'appli aussi.
Extrait du code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
// select query... 
CString sz = "select count(*) from road.test"; 
st = ::OCIStmtPrepare(  m_pStmt, m_pErr, 
                       (text*) sz.GetBuffer( 0 ), sz.GetLength(), 
                        OCI_NTV_SYNTAX, OCI_DEFAULT ); 
if ( st != OCI_SUCCESS && st != OCI_SUCCESS_WITH_INFO ) { 
  return false; 
} 
 
// ---> this one is ok 
st = ::OCIStmtExecute( m_pService, m_pStmt, m_pErr, 0, 0, NULL, NULL, OCI_DEFAULT ); 
if ( st != OCI_SUCCESS && st != OCI_SUCCESS_WITH_INFO ) { 
  return false; 
} 
 
// update query 
sz = "update road.test set col1 = 3"; 
st = ::OCIStmtPrepare(  m_pStmt, m_pErr, 
                       (text*) sz.GetBuffer( 0 ), sz.GetLength(), 
                        OCI_NTV_SYNTAX, OCI_DEFAULT ); 
if ( st != OCI_SUCCESS && st != OCI_SUCCESS_WITH_INFO ) { 
  return false; 
} 
 
// ---> this one never returns.... 
st = ::OCIStmtExecute( m_pService, m_pStmt, m_pErr, 1, 0, NULL, NULL, OCI_DEFAULT ); 
if ( st != OCI_SUCCESS && st != OCI_SUCCESS_WITH_INFO ) { 
  return false; 
}
En fait, je me demande s'il n'y a pas un problème de configuration. Si je me connecte avec les mêmes user/pwd en passant par la console d'administration, le update fonctionne. Si j'envoie ce même update via un autre code exploitant OCI (la petite appli Osql freeware de Ben Bryant), il bloque au même endroit que moi.

Qu'ai-je pu oublier au niveau droits (ou paramétrage de l'environnement lors de l'OCIEnvCreate, ou ailleurs) qui me bloque ainsi ??????