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 :

Trigger function update sur champs XML


Sujet :

SQL Procédural MySQL

  1. #21
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut a tous

    une derniere chose,
    si je souhaite ajouter un filtre a l'update sur ce trigger, c'est possible?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    delimiter $$
    CREATE TRIGGER T_updxml BEFORE INSERT ON luis1
    FOR EACH ROW BEGIN
     
    SET new.marcxml=UpdateXml(new.marcxml,
      '/record/controlfield[@tag=001]',
      concat('<controlfield tag="001">',SUBSTRING(ExtractValue(new.marcxml,'//controlfield[@tag="001"]'),-10,9),'</controlfield>'));
      END$$
     
    delimiter ;

    Le filtre serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    where ExtractValue(marcxml, '//datafield[@tag="035"]/subfield[@code="9"]') like 'ES-BaCBU%'
    or ExtractValue(marcxml,'//controlfield[@tag="003"]') ='ES-BaCBU'
    and LENGTH(ExtractValue(marcxml,'//controlfield[@tag="001"]'))=10;
    Je le colle directemenr entre les )) et le ; ?

    Comme ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    delimiter $$
    CREATE TRIGGER T_updxml BEFORE INSERT ON luis1
    FOR EACH ROW BEGIN
     
    SET new.marcxml=UpdateXml(new.marcxml,
      '/record/controlfield[@tag=001]',
      concat('<controlfield tag="001">',SUBSTRING(ExtractValue(new.marcxml,'//controlfield[@tag="001"]'),-10,9),'</controlfield>'))
      where ExtractValue(marcxml, '//datafield[@tag="035"]/subfield[@code="9"]') like 'ES-BaCBU%'
    or ExtractValue(marcxml,'//controlfield[@tag="003"]') ='ES-BaCBU'
    and LENGTH(ExtractValue(marcxml,'//controlfield[@tag="001"]'))=10
    ;
    END$$
    delimiter ;
    Ça donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where ExtractValue(marcxml, '//datafield[@tag="035"]/subfield[@code="9"]') like ' at line 7
    Encore une parenthèse?
    D'avance merci

  2. #22
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    tu dois le mettre dans un if then end if...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    delimiter $$
    CREATE TRIGGER T_updxml BEFORE INSERT ON luis1
    FOR EACH ROW
    BEGIN
      if ExtractValue(new.marcxml, '//datafield[@tag="035"]/subfield[@code="9"]') LIKE 'ES-BaCBU%'
        or ExtractValue(new.marcxml,'//controlfield[@tag="003"]') ='ES-BaCBU'
        and LENGTH(ExtractValue(marcxml,'//controlfield[@tag="001"]'))=10
      then
        SET new.marcxml=UpdateXml(new.marcxml,
          '/record/controlfield[@tag=001]',
          concat('<controlfield tag="001">',SUBSTRING(ExtractValue(new.marcxml,'//controlfield[@tag="001"]'),-10,9),'</controlfield>'));
      end if;
    END$$
     
    delimiter ;

  3. #23
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    ha genial,
    Faut pas ajouter une reference de la table que je souhaite updater?
    Car si dans le trigger l'on met:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TRIGGER T_updxml BEFORE INSERT ON luis1
    Et ensuite dans le SET on ne met rien, par default le trigger fera l'update sur la teble luis1 ? Il est possible de faire un update sur une autre table n'est ce pas?

    Aller apres j'arrête.
    France espagne samedi !!

  4. #24
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    si tu veux triturer une autre table que la table en cours oui tu devras utiliser la syntaxe normale de ton insert ou update que tu auras placé dans le trigger

  5. #25
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    ok
    J'ai compris.
    Bon et bien cette fois, c'est tout bon. Merci beaucoup pour l'aide apportée. Je vous souhaite une bonne semaine !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [2008R2] Trigger d'update sur une seconde BD + champ date
    Par CHoule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/05/2014, 09h09
  2. [Update] sur champ vide
    Par userB dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/06/2007, 10h22
  3. Réponses: 5
    Dernier message: 15/06/2007, 16h05
  4. [ORACLE 9i]Update sur champs avec contrainte
    Par gowser dans le forum SQL
    Réponses: 11
    Dernier message: 14/06/2007, 14h40
  5. Problème requete sur champs xml
    Par fred6655 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/09/2006, 13h19

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