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

SQL Procédural MySQL Discussion :

problème de retour NULL


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut problème de retour NULL
    Bonjour!!
    J'ai à nouveau un petit souci. Ma procédure est syntaxiquement parlant juste.
    Le problème est quelle me retourne une erreur qui est:
    +--------------+
    | var_date_dep |
    +--------------+
    | 2009-04-13 |
    +--------------+
    1 row in set (10.52 sec)

    +--------------+
    | var_date_dep |
    +--------------+
    | NULL |
    +--------------+
    1 row in set (10.52 sec)

    +--------------------------------------------------------------------------+
    | var_date_fin= ADDDATE(curdate(), (- DATE_FORMAT (curdate(), '%w') + 14)) |
    +--------------------------------------------------------------------------+
    | NULL |
    +--------------------------------------------------------------------------+
    1 row in set (10.53 sec)

    ERROR 1329 (02000): No data - zero rows fetched, selected, or processed
    mysql>
    Voici la procédure retournant ce résultat. (je précise c'est la première fois que je fait une procédure stockée sous MySQL).

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
     
     
     
    DELIMITER |
     
    use maintenance1 |
    SET SQL_MODE = ANSI |
    DROP PROCEDURE IF EXISTS action_ensemble|
     
    CREATE DEFINER = 'maintenance'@'localhost' PROCEDURE action_ensemble()
    BEGIN
    	DECLARE var_machine char( 5);
    	DECLARE var_tache char( 100);
    	DECLARE var_thisdate date;
    	DECLARE var_date_dep date;
    	DECLARE var_date_fin date;
    	DECLARE var_temp char( 10);
    	DECLARE var_secteur char( 25);
    	DECLARE var_period int;
    	DECLARE fetch_status INTEGER default 0;
    	DECLARE var_sql char( 255);
     
    	DECLARE C_tache_machine CURSOR FOR
    		SELECT nom_machine, nom_tache
    		FROM t_tache_machine
    		WHERE ( t_tache_machine.periode_tache <> 9999 
    		AND t_tache_machine.periode_tache <> 999)
    		ORDER BY nom_machine;
     
     
    	DECLARE C_date CURSOR FOR
    		SELECT Date_prev FROM T_data WHERE nom_machine =RTRIM(var_machine) 
    		AND nom_tache= RTRIM(var_tache)  AND date_prev=(select max(date_prev) 
    		FROM T_data WHERE nom_machine =  + RTRIM(var_machine) 
    		AND nom_tache=  RTRIM(var_tache) ) limit 1;
     
    	DECLARE C_donne CURSOR FOR
    		SELECT nom_machine, secteur_machine, nom_tache, periode_tache
    		FROM T_tache_machine
    		WHERE nom_machine= var_machine AND nom_tache= var_tache 
    		AND(t_tache_machine.periode_tache<> 9999 
    		AND t_tache_machine.periode_tache<> 999) limit 1;
     
     
     
     
      OPEN C_tache_machine;
      FETCH	NEXT FROM C_tache_machine INTO var_machine, var_tache;
      WHILE FETCH_STATUS= 0 DO
     
      OPEN C_date;
      OPEN C_donne;
     
      FETCH FROM C_date INTO var_thisdate;
      FETCH FROM C_donne INTO var_machine, var_secteur, var_tache, var_period;
      SELECT var_thisdate;
     
      IF DATEDIFF(var_thisdate, Now())> 31 OR FETCH_STATUS<> 0 
    	THEN
    		SELECT ADDDATE(curdate(), - DATE_FORMAT(curdate(), '%w') + 8) as var_date_dep;
    		SELECT var_date_dep;
    	ELSE
    		SELECT var_date_dep= COALESCE(var_thisdate, (adddate(curdate(), (-date_format(curdate(), '%w')+8))));
     
      END IF;
     
    SELECT var_date_fin= ADDDATE(curdate(), (- DATE_FORMAT (curdate(), '%w') + 14));
    	WHILE (select var_date_dep)< var_date_fin DO
    		IF (SELECT DATE_FORMAT(var_date_dep, '%w')) < 6 
    			THEN
    				INSERT T_data (nom_machine, secteur_machine, nom_tache, date_prev, periodicite_tache) 
    				VALUES (var_machine, var_secteur, var_tache, var_date_dep, var_period);
    		END IF;
    		SELECT var_date_dep= ADDTIME (var_date_dep, var_period * 4);
    	END WHILE;
    	CLOSE C_donne;
    	CLOSE C_date;
    	FETCH NEXT FROM C_tache_machine INTO var_machine, var_tache;
    	END WHILE;
    	CLOSE C_tache_machine;
    END|
     
    DELIMITER ;
    Je suis bien embété car cela fait maintenant 10 jours que je cherche à la débugger sans résultat.

    Voici les informations pour éventuellement faire un jeu d'essaie:
    Création des tables:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    CREATE TABLE `t_data` (
      `num_data`           int(4) AUTO_INCREMENT NOT NULL PRIMARY KEY,
      `nom_machine`        char(25) NOT NULL,
      `secteur_machine`    char(25) NOT NULL,
      `nom_tache`          char(100) NOT NULL,
      `lien_tache`         char(150),
      `date_prev`          date NOT NULL,
      `date_eff`           date,
      `periodicite_tache`  int(4) NOT NULL,
      `code_user`          int(4)
    ) ENGINE = MyISAM;
     
    CREATE TABLE `t_machine` (
      `num_machine`      int(4) AUTO_INCREMENT NOT NULL PRIMARY KEY,
      `nom_machine`      char(5) NOT NULL,
      `secteur_machine`  char(5) NOT NULL,
      `cc_machine`       char(20) NOT NULL
    ) ENGINE = MyISAM;
     
    CREATE TABLE `t_tache` (
      `num_tache`   int(4) AUTO_INCREMENT NOT NULL PRIMARY KEY,
      `nom_tache`   char(100) NOT NULL,
      `lien_tache`  char(150)
    ) ENGINE = MyISAM;
     
    CREATE TABLE `t_tache_machine` (
      `num_tache_machine`  int(4) AUTO_INCREMENT NOT NULL PRIMARY KEY,
      `nom_machine`        char(5) NOT NULL,
      `secteur_machine`    char(20) NOT NULL,
      `cc_machine`         char(5) NOT NULL,
      `nom_tache`          char(100) NOT NULL,
      `lien_tache`         char(150),
      `periode_tache`      int(4) NOT NULL,
      `debut_periode`      date
    ) ENGINE = MyISAM;
     
    CREATE TABLE `t_user` (
      `num_user`     int(6) AUTO_INCREMENT NOT NULL PRIMARY KEY,
      `nom_user`     char(30) NOT NULL,
      `prenom_user`  char(30) NOT NULL,
      `code_user`    int(4) NOT NULL
    ) ENGINE = MyISAM;
    Données:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    INSERT INTO `T_data` VALUES ('262','1','D2','Changer le filtre',NULL,STR_TO_DATE('04/04/2005 00:00:00','%d/%m/%Y %T'),NULL,'6','272');
    INSERT INTO `T_data` VALUES ('263','1','D2','Changer le filtre',NULL,STR_TO_DATE('05/04/2005 00:00:00','%d/%m/%Y %T'),NULL,'6','272');
    INSERT INTO `T_data` VALUES ('264','1','D2','Changer le filtre',NULL,STR_TO_DATE('06/04/2005 00:00:00','%d/%m/%Y %T'),NULL,'6','448');
    INSERT INTO `T_data` VALUES ('265','1','D2','Changer le filtre',NULL,STR_TO_DATE('07/04/2005 00:00:00','%d/%m/%Y %T'),NULL,'6','210');
    INSERT INTO `T_data` VALUES ('266','1','D2','Changer le filtre',NULL,STR_TO_DATE('08/04/2005 00:00:00','%d/%m/%Y %T'),NULL,'6','272');
     
     
    INSERT INTO `T_machine` VALUES ('29','1','D2','51D2');
    INSERT INTO `T_machine` VALUES ('4','1','D2','52D2M');
    INSERT INTO `T_machine` VALUES ('38','10','D2','51D2');
    INSERT INTO `T_machine` VALUES ('128','100','D2','51D2');
    INSERT INTO `T_machine` VALUES ('129','101','D2','51D2');
     
     
    INSERT INTO `T_tache` VALUES ('15','CHANGEMENT FILTRES 1, 2, 3','\\memetecnot01\eteaux\atelier\fiche\53LA\FI1442.htm');
    INSERT INTO `T_tache` VALUES ('6','Changer le filtre','\\memetecnot01\eteaux\atelier\fiche\FI 144 .htm #test');
    INSERT INTO `T_tache` VALUES ('75','CN BS12 nettoyage pince','\\memetecnot01\eteaux\Atelier\fiche\51CN\tsugami bs12\FI1449.htm');
    INSERT INTO `T_tache` VALUES ('73','CN BS12 vidange bac machine','\\memetecnot01\eteaux\Atelier\fiche\51CN\tsugami bs12\FI1443.htm');
    INSERT INTO `T_tache` VALUES ('74','CN BS12 vidange embarreur','\\memetecnot01\eteaux\Atelier\fiche\51CN\tsugami bs12\FI1444.htm');
     
     
    INSERT INTO `T_tache_machine` VALUES ('73','700','TO','51TO','NETTOYAGE MACHINE','','720',NULL);
    INSERT INTO `T_tache_machine` VALUES ('64','700','TO','51TO','to m7 debut de poste (doc)','\\memetecnot01\eteaux\Atelier\fiche\52TO\M7\FI1445.htm','6',NULL);
    INSERT INTO `T_tache_machine` VALUES ('71','700','TO','51TO','TO M7 MOP','\\memetecnot01\eteaux\Atelier\fiche\52TO\M7\FI1441.htm','9999',NULL);
    INSERT INTO `T_tache_machine` VALUES ('72','700','TO','51TO','TO M7 PS','\\memetecnot01\eteaux\Atelier\fiche\52TO\M7\FI1442.htm','999',NULL);
    INSERT INTO `T_tache_machine` VALUES ('79','701','TO','51TO','NETTOYAGE MACHINE','','720',NULL);
     
     
    INSERT INTO `T_user` VALUES ('113','PIERRE','ANDRE','105');
    INSERT INTO `T_user` VALUES ('114','DUPONT','JACQUES','106');
    INSERT INTO `T_user` VALUES ('148','ANTOINE','MARC','149');
    INSERT INTO `T_user` VALUES ('164','MARTIN','ANGELIQUE','168');
    INSERT INTO `T_user` VALUES ('109','RINTINTIN','NABIL','100');

    Autre chose, connaitriez-vous un logiciel pour analyser ligne par ligne une procédure stockée (débogger MySQL)?

    Un GRAND MERCI!! A toute personne pouvant m'apporter même une toute petite info pour m'aider à avancer.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Cet outil, dans sa version standard, fait du debugging de procédures stockées sous MySQL.
    La version professional est téléchargeable en version d'essai et le fait également.

    Je n'ai jamais testé, mais ça pourrait t'aider.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    MySQL-Front également ...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut
    merci beaucoup CED!!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2012, 00h01
  2. [MySQL] problème de retour à la ligne.
    Par NPortmann dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/09/2005, 14h43
  3. Problème de valeur null dans un recordset
    Par Petzouille57 dans le forum Access
    Réponses: 3
    Dernier message: 19/05/2005, 11h27
  4. [Struts] Problème de retour chariot
    Par pimousse76 dans le forum Struts 1
    Réponses: 5
    Dernier message: 22/11/2004, 15h39
  5. Retour NULL d'une fonction utilisateur
    Par tiboleo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/11/2004, 15h40

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