IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces de programmation Oracle Discussion :

[10g1][OCI][C++][IIS] Blocage sur un update


Sujet :

Interfaces de programmation Oracle

  1. #1
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut [10g1][OCI][C++][IIS] Blocage sur un update
    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 ??????

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Ce n'est probablement pas un problème de droit sinon Oracle retournerait un message d'erreur immédiatement. Cela ressemble plus à un problème de verrouillage qui peut être lié eventuellement au mode d'isolation de la transaction (SET TRANSACTION ...) ou d'une autre session qui verrouillerait la ligne concernée.

    Essaie de vérifier que la ligne en question n'est pas verrouillé en remplaçant la commande "update road.test set col1=3 par "select col1 from road.test where col1=x for update nowait"
    Sil la ligne est verrouillée: ORA-00054 sera retourné.

  3. #3
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Tu as raison : c'est une session ouverte lors d'un test précédent et mal fermée (en fait pas fermée du tout... ) qui bloquait les lignes.
    Ouf !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Update] Blocage sur Statement.executeUpdate
    Par K-Kaï dans le forum JDBC
    Réponses: 8
    Dernier message: 26/09/2007, 16h28
  2. Réponses: 2
    Dernier message: 24/02/2006, 09h15
  3. [IIS] Tomcat sur IIS ??
    Par Maximus32 dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 07/02/2006, 17h43
  4. [Oracle 9i] Triggers sur les updates de tables
    Par zestrellita dans le forum Oracle
    Réponses: 12
    Dernier message: 07/12/2005, 11h32
  5. svp un peu d'aide sur mon update, resumé simple en dessous
    Par hansaplast dans le forum Langage SQL
    Réponses: 11
    Dernier message: 14/11/2005, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo