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 09/08/2007, 14h33   #1
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
Par défaut Requête delete: Erreur ORA-00933

Bonjour, je suis de retour
j'ai un tout petit problème avec ma requête DELETE, que voici, et dont je ne vois pas l'erreur (comme d'hab )
Citation:
DELETE FROM table1 WHERE ID IN (11,3)
UNION
DELETE FROM table2 WHERE ID IN (11,3)
UNION
DELETE FROM table3 WHERE ID IN (11,3)
lors de son exécution j'ai l'exception suivante :
Citation:
[Warning] ora_do() [<a href='function.ora-do'>function.ora-do</a>]: Ora_Do failed (ORA-00933: la commande SQL ne se termine pas correctement -- while processing OCI function OEXEC/OEXN) (@line 68 in file C:\...).
j'ai essayé aussi la syntaxe suivante :
Citation:
DELETE FROM table1,table2,table3
WHERE table1.ID IN (11,3)
or table2.ID IN (11,3)
or table3.ID IN (11,3)
mais ça ne marche pas non plus je ne sais pas qu'est ce qui m'échappe.

merci pour toute aide et bon courage.
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 14h39   #2
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
On ne peut pas faire un DELETE sur plusieurs tables dans le même ordre sql
Donc, il faut faire
Code :
1
2
3
4
 
DELETE FROM table1 WHERE ID IN (11,3);
DELETE FROM table2 WHERE ID IN (11,3); 
DELETE FROM table3 WHERE ID IN (11,3);
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h06   #3
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
Merci Garuda pour ta réactivité et ton aide. En effet j'ai dû préciser que je n'exécute pas ma requête depuis la ligne de commande directement mais plutot à travers une methode PHP à laquelle je fais appel dans mon projet :

Citation:
public function deleteAll($values)
{
$sql=Database::getInstanceOf($this->getApplication()->Parameters['DATA_BASE']);
$sql->connect();
$data=implode(',',$values);

$query = " DELETE FROM table1 WHERE ID IN ($data); "
." DELETE FROM table2 WHERE ID IN ($data) ; "
." DELETE FROM table3 WHERE ID IN ($data) ;";

return $sql->exe($query);
}
et donc j'aimerai faire un seul aller/retour au serveur pour effectuer les suppressions. j'ai essayé de tester ta solution mais ça génère une erreur aussi et c'est normal je pense.

alors y'aurait-il un moyen pour regrouper mes trois requêtes delete en une seule ?
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h12   #4
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Bon sang de bois, pourquoi ne donnez vous jamais LE MESSAGE ET LE CODE DE L'ERREUR !!!
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h26   #5
Membre éprouvé
 
Avatar de argoet
 
Inscription : mai 2002
Messages : 535
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 535
Points : 461
Points : 461
Citation:
Envoyé par Garuda
Bon sang de bois, pourquoi ne donnez vous jamais LE MESSAGE ET LE CODE DE L'ERREUR !!!
Avez vous lu le sujet de ce TOPIC ?
00933, 00000, "SQL command not properly ended"

Vous opuvez utiliser un procedure dans votre cas qui effectue ces 3 DELETE;
Et appelez simplement cette procedure depuis la fonction deleteALL
__________________
Signé : Capitaine Jean-Luc Picard
argoet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h29   #6
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
désolé, voici le code erreur :
Citation:
[Warning] ora_do() [<a href='function.ora-do'>function.ora-do</a>]: Ora_Do failed (ORA-00911: caract貥 non valide -- while processing OCI function OEXEC/OEXN) (@line 68 in file C:\wamp\www\administration\protected\classes\base\Oracle.php).
merci encore une fois pour ta collaboration.
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h34   #7
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
merci argoet . sinon qu'est ce que tu entends par procedures ? procédures stockées c'est ça ? si oui est ce que ce n'est pas possible de faire autrement ?
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h36   #8
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Tu peux faire un bloc PL/SQl anonyme et l'appeler depuis ton code PHP (désolé, je ne connais pas la syntaxe )
Code :
1
2
3
4
5
6
7
 
BEGIN
DELETE FROM table1 WHERE ...;
DELETE FROM table2 WHERE ...;
DELETE FROM table3 WHERE ...;
COMMIT;
END;
Tu peux faire de ce même code une procédure PL/SQL dans la base ORACLE que tu appelles depuis ton code.
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h47   #9
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
aucune idée non plus. bon je cherche dans ce sens et vous repondra dès que c'est trouvé. en attendant toutes autre proposition sera la bienvenue
Merci mille fois.
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h53   #10
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
en effet, j'ai oublié un petit détail qui est très important. ma requête doit etre compatible avec sql server aussi car mon application doit pouvoir tourner sur oracle que sur sql server (parametrable)
donc je pense qu'avec les bloc PL/SQL marchera pas d'après ce que je viens de lire jusque là
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h54   #11
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Essaye
Code :
1
2
3
ora_parse($curs, "BEGIN DELETE FROM table1 WHERE ...;DELETE FROM table2 WHERE ...;DELETE FROM table3 WHERE ...;END;";
ora_exec($curs);
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h56   #12
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Citation:
Envoyé par loukili81
en effet, j'ai oublié un petit détail qui est très important. ma requête doit etre compatible avec sql server aussi car mon application doit pouvoir tourner sur oracle que sur sql server (parametrable)
donc je pense qu'avec les bloc PL/SQL marchera pas d'après ce que je viens de lire jusque là
Petit détail, en effet !
Et ca se corse drolement !
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 16h57   #13
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
oui en effet mais on finira par trouver une solution
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 19h04   #14
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
pas comme je le pensais, ta solution Garuda marche bien aussi bien pour ORACLE que pour sql server.
BRAVO Garuda


Citation:
$query =" BEGIN "
." DELETE FROM table1 WHERE ID_OPERATEUR IN ($data); "
." DELETE FROM table2 WHERE ID_OPERATEUR IN ($data); "
." COMMIT ;"
." END;";
Bonne chance à toutes et à tous.
loukili81 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 10h53.


 
 
 
 
Partenaires

Hébergement Web