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 :

Update de toute les tables %_


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 32
    Points : 17
    Points
    17
    Par défaut Update de toute les tables %_
    Hello,

    J'essai de mettre à jour une URL dans toute les tables qui contiennent %__akquickicons_icons
    Dans un premier temps j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%__akquickicons_icons%'
    J'ai bien toutes mes tables qui ce liste.

    Donc maintenant je veux changer "index.php?option=com_content&view=articles&filter_category_id=" par "index.php?option=com_content&view=articles&filter[category_id]=", dans toutes les tables LIKE '%__akquickicons_icons', et de la colonne "link"

    J'ai parcourus la toile et je suis tombé sur ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    BEGIN
      FOR r IN (
        SELECT 'UPDATE ' || owner || '.' || table_name ||
           ' SET ' || column_name || ' = ''' || 'index.php?option=com_content&view=articles&filter[category_id]=' ||
        ''' WHERE ' || column_name || ' = ''' || 'index.php?option=com_content&view=articles&filter_category_id=' || '''' AS command
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE table_name LIKE '%__akquickicons_icons'
      )
      LOOP
        EXECUTE IMMEDIATE r.command;
      END LOOP;
    END;
     
    COMMIT;
    Mais j'ai une erreur #1054 - Unknown column 'owner' in 'field list'

    Une piste pour sortir de la toile ? :-)

    PS : je pourrais faire une par une comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE  pgs1200101__akquickicons_icons
    SET link = REPLACE(link, 'index.php?option=com_content&view=articles&filter_category_id=', 'index.php?option=com_content&view=articles&filter[category_id]=')
    WHERE link LIKE '%index.php?option=com_content&view=articles&filter_category_id=%'
    Mais j'ai plus d'une centaine de tables... et 3 liens à modifier...

    Merci,

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE TABLE_NAME LIKE '%__akquickicons_icons%'
    Et quelle est donc cette horreur de base de données où un paquet de tables portent quasiment le même non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BEGIN
      FOR r IN (
        SELECT 'UPDATE ' || owner || '.' || table_name ||
    Je pense que la logique de votre procédure est fausse.
    Vous devez d'abord récupérer par un SELECT sur INFORMATION_SCHEMA les tables concernées et ensuite construire la série de requêtes UPDATE en parcourant le résultat du SELECT. Là, vous sélectionnez un UPDATE ; ça n'a pas de sens !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Hello CinePhil,

    Merci pour le déplacement ( le tient et celui de mon message :-) )
    Pour les table de merde :-) en effet mais c'est involontaire (multisites joomla donc certaines tables sont dupliqués...)

    Pour la requête ça me semblait aussi biscornu, mais là c'est un peu compliquer, autant les requêtes simple ça peut aller...
    Autant je comprends quand tu dis :

    "SELECT sur INFORMATION_SCHEMA les tables concernées"

    mais après je vois pas du tout comment procéder :

    "et ensuite construire la série de requêtes UPDATE"

    Merci,

Discussions similaires

  1. Update sur toutes les champs de toutes les tables
    Par cmasset dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/12/2013, 19h04
  2. [SQL Server]La liste de toutes les tables
    Par Husqvarna dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/09/2008, 16h21
  3. Mettre à false toutes les tables d'un projet
    Par tomm dans le forum Bases de données
    Réponses: 9
    Dernier message: 28/05/2006, 00h36
  4. Pb effacer toutes les tables d'une bd access
    Par madiam2004 dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/05/2004, 15h24
  5. Sélection de toute les tables d'une base
    Par lord_paco dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/07/2003, 14h56

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