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

Oracle Discussion :

Requête INSERT et ora-00911


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut Requête INSERT et ora-00911
    Bonjour,

    je souhaite insérer un enregistrement dans une base oracle via ODBC depuis un programme C++.

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO HISTO_COURS (DATE_,DEV1_,DEV2_) VALUES('17/01/2007','EUR','USD');
    Dans ce cas la méthode SQLPrepare me retourne l'erreur suivante : ORA-00911 : Invalid Character.

    J'ai alors supprimé le ';' à la fin de la requête. Cette fois SQLPrepare marche, mais le programme reste bloqué dans SQLExecute

    L'ensemble fonctionne avec d'autres bases de données (Access, SQL Server), les requêtes de sélection fonctionnent aussi.


    Merci pour votre aide.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Si la colonne DATE_ est de type DATE alors essayez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO HISTO_COURS (DATE_,DEV1_,DEV2_) VALUES(TO_DATE('17/01/2007', 'DD/MM/YYYY'),'EUR','USD')
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Ca ne fonctionne pas.

    Je croyais au début que cela venait du champe DATE_, mais même en l'omettant de la requête j'ai la même erreur.

    J'ai essayé la requête dans TOAD, elle marche bien (avec ou sans ';').

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Vous le dîtes vous-mêmes : en exécutant votre requête sous SQLPlus ou sous TOAD elle ne génère aucune erreur.
    Tout semble indiquer que l'erreur que vous rencontrez est dû au langage C++ et vos méthodes d'accès à la base plus qu'à Oracle.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    J'aimerais cependant savoir d'ou vient mon erreur parce que je ne vois pas comment résoudre ce problème.

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Donne ton code pour voir.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    string query = "INSERT INTO HISTO_COURS (DATE_,DEV1_,DEV2_) VALUES('17/01/2007','EUR','USD');";
    int retcode = SQLAllocStmt(_hDBC,&hStmt);
    if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    	retcode = SQLPrepare(hStmt,(SQLCHAR*) query.c_str(),static_cast<SQLINTEGER>(query.size()));
    		if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
    			retcode = SQLExecute(hStmt);
    			if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    				bResult = true;
    		}
     
    }

  8. #8
    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
    Supprimez le ';' et vérifiez qu'il n'y a de blocages dans la base avec:

    SELECT * FROM dba_blockers;
    SELECT * FROM dba_waiters;
    Si ces 2 vues ne retournent rien, il n'y a pas de blocage dû à un problème de verrouillage. Sinon vérifiez bien que vous n'avez pas plusieurs sessions qui essaient d'insérer la même ligne dans la même table: s'il y a une clé primaire sur la table, il y aura blocage.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Je ne suis pas expert en Oracle mais ils ne trouvent pas les tables dba_blockers et dba_waiters.

    Je n'ai pas plusieurs sessions fonctionnant en même temps, j'ai uniquement mon application C++.

  10. #10
    Membre averti Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Points : 408
    Points
    408
    Par défaut
    ton application est mono thread ? pcq si elle est multi-thread ce revient a avoir plusieurs session.

    As tu TOAD ? Quand ton application est bloqué tu vois quoi comme "current statement" ? (Ca doit aussi se trouver dans des vu system mais j'ai pas le courage de chercher maintenant)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    J'ai trouvé le problème, mon application reste bloquée lorsque TOAD est lancé et connecté.

    Existe-t-il un moyen d'utiliser "les deux" à la fois ?


    Merci.

  12. #12
    Membre averti Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Points : 408
    Points
    408
    Par défaut
    Bien sur que tu peux lancer les deux a la fois. Si Oracle était mono utilisateur cela se saurais.

    Si tu es bloqué c'est que tu as fais une mise a jour dans TOAD que tu n'as pas commité. Alors Oracle est obligé de locker les données.

    C'est ce que pifor te demandais de verifier en faisant des selects dans dba_blockers et dba_waiters

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Ok merci c'est bon maintenant.

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

Discussions similaires

  1. [VBA] difficultés avec une requête INSERT
    Par elias dans le forum Access
    Réponses: 7
    Dernier message: 06/09/2005, 14h53
  2. requête insert
    Par mattoo dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/04/2005, 14h09
  3. Réponses: 4
    Dernier message: 05/04/2005, 18h28
  4. probleme requête insert.... where
    Par Amandine62 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/02/2005, 14h26
  5. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45

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