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 delete: Erreur ORA-00933


Sujet :

Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    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 )
    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 :
    [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 :
    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.

  2. #2
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    On ne peut pas faire un DELETE sur plusieurs tables dans le même ordre sql
    Donc, il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Par défaut
    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 :

    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 ?

  4. #4
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Bon sang de bois, pourquoi ne donnez vous jamais LE MESSAGE ET LE CODE DE L'ERREUR !!!

  5. #5
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    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

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Par défaut
    désolé, voici le code erreur :
    [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.

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Par défaut
    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 ?

  8. #8
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Tu peux faire un bloc PL/SQl anonyme et l'appeler depuis ton code PHP (désolé, je ne connais pas la syntaxe )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Par défaut
    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.

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Par défaut
    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à

  11. #11
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ora_parse($curs, "BEGIN DELETE FROM table1 WHERE ...;DELETE FROM table2 WHERE ...;DELETE FROM table3 WHERE ...;END;";
    ora_exec($curs);

  12. #12
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    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 !

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Par défaut
    oui en effet mais on finira par trouver une solution

  14. #14
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Par défaut
    pas comme je le pensais, ta solution Garuda marche bien aussi bien pour ORACLE que pour sql server.
    BRAVO Garuda


    $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.

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

Discussions similaires

  1. [11g] Requête avec erreur ORA 00905
    Par shadowmoon dans le forum PL/SQL
    Réponses: 1
    Dernier message: 17/04/2014, 16h02
  2. Erreur ORA-00933 shell linux
    Par xeron33 dans le forum Oracle
    Réponses: 10
    Dernier message: 11/06/2013, 19h04
  3. Delete erreur ORA-00933
    Par jycollet dans le forum SQL
    Réponses: 2
    Dernier message: 20/01/2012, 18h16
  4. Erreur ORA-00933 en verifiant la connection avec la base de données
    Par bey1986 dans le forum Connexions aux bases de données
    Réponses: 5
    Dernier message: 20/05/2009, 04h10
  5. Réponses: 6
    Dernier message: 29/11/2005, 19h36

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