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

Langage SQL Discussion :

Recuperation valeur de retour DELETE


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Recuperation valeur de retour DELETE
    Bonjour @ tous,
    Jsuis à la recherche d'une ptit info sur la récupération des valeurs de retour de la fonction DELETE.
    D'apres mes recherches donc la principale source est ici :

    - http://dev.mysql.com/doc/refman/5.0/fr/delete.html

    Elle indique que DELETE renvoie le nombre de tuples supprimés.
    Cependant je dois réaliser une procédure stockée pour la suppression tout la relation associé au thème lorsqu'on delete celui-ci.
    Ce qui donne :

    dropped correspondrait à la valeur de retour de delete pour savoir s'il existe encore des photos à supprimer.
    Cependant je n'arrive pas à lui affecter la valeur de retour de DELETE
    voila mon Code en GRAS se trouve les modifications qui ne fonctionne pas.
    DELIMITER$$
    CREATE FUNCTION DEL_REPORT(NUM_REPORTAGE INTEGER) RETURNS BOOLEAN
    BEGIN
    DECLARE dropped INTEGER(10);

    dropped = (DELETE FROM COUT WHERE reportage_idreportage = NUM_REPORTAGE);

    IF (dropped=0)
    THEN RETURN false;

    ELSEIF
    THEN BEGIN
    DELETE FROM PHOTOS WHERE reportage_idreportage = NUM_REPORTAGE;
    DELETE FROM REPORTAGE WHERE idreportage = NUM_REPORTAGE;
    END;
    END IF;


    RETURN true;
    END$$
    DELIMITER;
    Edit : j'oubliais je ne veux pas le faire sous Php car mon maître de stage tiens absolument à ce que je fasse des procédures stockées et donc je ne peux pas utiliser mysql_affected_rows().

    Merci d'avance,
    Scowl

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 66
    Points
    66
    Par défaut
    Salut,

    j'ai pas trop le temps de tester, mais moi je mettrais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET dropped = (DELETE FROM COUT WHERE reportage_idreportage = NUM_REPORTAGE);
    Explique un peu plus ou se situe réellement ton problème ?

    @+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ai crée un trigger à la place de faire cela en attendant une idée de qqun.
    C'est vilain mais ca fonctionne.

    Cependant j'avais testé set et ca ne fonctionnait pas non plus. <3 Mysql.

    J'ai cherché dans les recoins du net, aucune réponse sur l'instanciation d'un integer par le resultat d'un DELETE.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 66
    Points
    66
    Par défaut
    Peut être un peu mieux qu'un trigger ... avec un select into spécifié sur ta clause where qui te permet de trouver le nombre de ligne qui seront affectés.

    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
    DELIMITER$$
    CREATE FUNCTION DEL_REPORT(NUM_REPORTAGE INTEGER) RETURNS BOOLEAN
    BEGIN
    DECLARE dropped INTEGER(10);
     
    SELECT count(*) INTO dropped FROM COUT WHERE reportage_idreportage = NUM_REPORTAGE;
     
    DELETE FROM COUT WHERE reportage_idreportage = NUM_REPORTAGE;
     
    IF (dropped=0)
    THEN RETURN false;
     
    ELSEIF
    THEN BEGIN
    DELETE FROM PHOTOS WHERE reportage_idreportage = NUM_REPORTAGE;
    DELETE FROM REPORTAGE WHERE idreportage = NUM_REPORTAGE;
    END;
    END IF;
     
     
    RETURN true;
    END$$
    DELIMITER;
    Je vais suivre la discussion, pour avoir une réponse à cette valeur de retour qui n'est pas récupérable (problème de type peut etre ...)
    à suivre

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bon ben Vive les serveurs mutualisés, ca m'a indirectement réglé mon problème.

    Du fait que seule la connexion par Phpmyadmin etait accepté, (on ne pouvait donc pas modifier les delimiteurs, PhpmyAdmin ne l'accepte pas) et on ne pouvait pas se connecter avec MySQLQueryBrowser.

    J'ai donc réalisé avec ZendDB la création des triggers & procédures (possible avec la fonction mysql_query aussi, on a testé ) comme si c'était des requêtes.
    Après de nombreux tests, on a trouvé la soluce.

    Pour ceux que ca interesse, le point-virgule n'est pas considéré comme terminal de procédure lorsqu'on utilise une de ces deux méthodes.
    Voici donc la solution à lancer à la naissance du serveur (enfin un bout du code) :

    $rqsql = 'CREATE TRIGGER DEL_REPORTAGE BEFORE ....
    BEGIN [...]
    DELETE FROM PHOTOS WHERE reportage_idreportage
    old.idreportage;
    END; ';

    $result = $db->query($rqsql);
    Avec par le biais de php on peut récuperer la valeur de retour .

    Testé & fonctionnel cependant si qqun à la solution directe ca serait intéressant.

    Cependant noirot, j'ai lu en anglais & Fr les explications des valeurs de retour de DELETE il est écrit que la fonction renvoyait le nombre d'occurences modifiées.


    Merci d'avance,
    Scowl

Discussions similaires

  1. [Batch] Recuperer valeur de retour d'un script vbs ou js
    Par hannibal.76 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 20/12/2012, 16h54
  2. Executer une ligne de commande ET recuperer valeur retour
    Par Korko Fain dans le forum Delphi
    Réponses: 4
    Dernier message: 10/08/2007, 16h31
  3. Réponses: 1
    Dernier message: 25/11/2006, 15h21
  4. [C#] Comment récupérer la valeur de retour d'une procédure stockée ?
    Par Jinroh77 dans le forum Accès aux données
    Réponses: 23
    Dernier message: 05/10/2006, 15h24
  5. Recuperer une valeur de retour?
    Par nic413 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 06/06/2006, 11h07

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