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 :

erreur avec ma procedure stockée/trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut erreur avec ma procedure stockée/trigger
    Bonjour, voici ma procédure :

    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
    DELIMITER $$
     
    create procedure update_adresses() 
    begin
     
    declare	id_dep bigint;
    declare	id_adr varchar(255);
    declare	lib_dep varchar(255);
    declare	zip_adr bigint;
    declare c_adresses cursor for select id,substring(zipCode,1,2)	from  `needprofile`.`address`;
    declare c_dept	cursor for select id,name from  `needprofile`.`departement`;
     
    	open c_adresses;
    	open c_dept;
    	c_adresses: LOOP
    		FETCH c_adresses into id_adr,zip_adr;
    		c_dept: LOOP
    			FETCH c_dept into id_dep,lib_dep;
    			if id_dep = zip_adr then
     
    				update  `needprofile`.`address`
    				set departement = lib_dep
    				where id= id_adr;
     
    			end if;
    		end loop;
     	end loop;
     
    	close c_adresses;
    	close c_dept;
     
    end;		
    $$
    la création se passe bien, ce qui m'embete c'est lorsque je l'execute, il me met :
    "error 1329 - No data , zero rows fetched, selected or processed"

    L'erreur viendrait-elle du code ?

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Un petit souci algorithmique peut-être...?

    Suite à la 1ère lecture sur address, la boucle c_dept amène le pointeur de curseur c_dept à la fin de la table, car il n'y a pas d'interruption de la boucle "intérieure".
    Puis tu passes à la 2nde lecture sur address, mais le curseur c_dept est déjà en fin de table...

    Mais c'est peut-être ce comportement que tu recherches

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Hm oui en effet, un petit oubli.

    Entre temps j'ai changé d'avis, je suis plus orienté vers la création d'un trigger plutot qu'une procédure, j'explique le contexte:

    j'ai les tables :
    address [id,street,zipCode,region,departement]
    departement [id,name]

    en gros via j'ai un script auto qui m'ajoute tous les jours des addresses, mais sans le departement, ce que je veux faire (via mon trigger donc) c'est mettre à jour mes tuples address qui ont la colonne departement vide en inserant le bon departement .

    voici une ebauche de trigger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    delimiter $$
    creat trigger update_address_departement after insert
    on address
    for each row
    begin
     
    update address a, departement d
    set a.departement = d.name
    where substring(a.zipCode,1,2) = d.id;
     
    end $$
    le soucis quand je tente d'inserer une addresse "test" c'est qu'apparement je ne peux pas faire un update dans un trigger after insert quand ca porte sur la meme table.

    D'une part, est-ce normal?
    Ensuite, si c'est effectivement impossible à faire, que proposez vous comme solution de substitution? passer par une table temporaire du genre, insert address => copie dans ma table temp qui maj le departement puis maj de ma table address?

Discussions similaires

  1. Erreur 450 avec une procedure stockée : Access/VB6
    Par poissonsoluble dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 30/05/2007, 10h14
  2. [PEAR][MDB2] Erreur avec une procédure stockée
    Par mikedavem dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 04/01/2007, 16h49
  3. Probleme avec une procedure stocké avec IF
    Par el_quincho dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/10/2006, 16h21
  4. [C#] [Oracle] Probleme avec une procedure stockée
    Par sronin1 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/05/2004, 19h04
  5. Récupération des paramètres avec une procedure stockée
    Par samlerouge dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/03/2004, 22h00

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