Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2007, 15h01   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 43
Points : 13
Points : 13
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 :
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.
punx120 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 15h16   #2
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Si la colonne DATE_ est de type DATE alors essayez :
Code :
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
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 15h21   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 43
Points : 13
Points : 13
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 ';').
punx120 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 16h03   #4
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
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
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 16h08   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 43
Points : 13
Points : 13
J'aimerais cependant savoir d'ou vient mon erreur parce que je ne vois pas comment résoudre ce problème.
punx120 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 16h31   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Donne ton code pour voir.
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 16h47   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 43
Points : 13
Points : 13
Voici :

Code :
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;
		}
 
}
punx120 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 17h21   #8
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Supprimez le ';' et vérifiez qu'il n'y a de blocages dans la base avec:

Citation:
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 17h32   #9
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 43
Points : 13
Points : 13
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++.
punx120 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 08h36   #10
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
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)
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 09h30   #11
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 43
Points : 13
Points : 13
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.
punx120 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 09h36   #12
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
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
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 10h01   #13
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 43
Points : 13
Points : 13
Ok merci c'est bon maintenant.
punx120 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h04.


 
 
 
 
Partenaires

Hébergement Web