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 :

Peut-on mettre à jour une VUE basée sur une union très simple ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 478
    Par défaut Peut-on mettre à jour une VUE basée sur une union très simple ?
    bonjour,

    j'ai une VIEW qui est construite à partir de l'union de 2 relations ayant exactement les mêmes structures et schéma.
    je souhaite mettre à jour une donnée de cette vue, est-ce possible en sql normalisé ?

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    table1 
    id nom prenom
    1 actarus eufor
    2 alcor oveterre
    
    table2
    3 alice Docteur
    4 simone patiente
    Et donc ma vue qui est la fusion des deux tables :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create mavue as
    select id , nom,prenom from table1
    union
    select id , nom,prenom from table2

    et donc je souhaite faire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    update mavue set prenom='chef' where id=1

    pensant que c'était possible dans l'absolu, j'ai codé la query et j'ai un message d'erreur mysql :
    The target table edt_fac of the UPDATE is not updatable (1288)
    Comme dit plus haut, je pensais que c'était possible car c'est le cas d'une interface qui gère les données d'une région et les données d'une autre région de même schéma et il y a une IHM qui centralise les données des 2 tables où les ID sont forcément uniquement aussi; donc je ne voyais pas d'impossibilité à faire ce genre de requête.

    alors, possible ? pas possible ? ou problème uniquement mysql ?
    Ne me dites pas que je dois passer par une étape nocturne où je devrais créer une vrai table "tampon" qui sera remplie de l'union des deux !

    bonne journée

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 453
    Par défaut
    Bonjour,
    D'après l'aide en ligne de mySql, tu ne peux pas lancer un UPDATE sur une vue avec une UNION.
    De plus CREATE TRIGGER n'est pas utilisable sur une vue, pour "prendre la main" sur la mise à jour comme je le fais par moment sur Sql Server avec un trigger INSTEAD OF.

    Bref tu es un peu coincé ici. Peut-être avec une procédure stockée au lieu d'une requête de mise à jour ?

    Tatayo.

  3. #3
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 478
    Par défaut
    d'accord merci.

    mais sinon, c'est une fonctionnalité "standardisée et normée" ou bien j'ai rêvé et ça n'a jamais existé ?
    ya-t-il des sgbd qui ont cette possibilité ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 453
    Par défaut
    SqlServer ne permet pas non plus de mettre à jour les données d'une vue qui comporte une UNION (cf l'aide en ligne).
    Mais comme je l'indiquais un trigger INSTEAD OF peut dans certains cas permettre de contourner cette limitation.

    Je ne sais pas ce qu'il en est des autres SGBD.

    En tout cas il semble que MySql ne te laisse aucune marge de manœuvre ici.

    Tatayo.

  5. #5
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 478
    Par défaut
    il y a très longtemps (dans les années 1990-2000), il me semble que mon prof avait dit que Oracle avait cette possibilité, est-ce un faut souvenir ?
    je crois avoir eu un TD d'une banque qui voulait unifier les données de ses agences, bref un cas classique maison-mère et filliale. comment font les gens dans ces cas là "updater" des données dans une vue consolidée ?

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Les conditions de mise à jour des vues répondent à une mathématique simple qui est que la correspondance entre ensemble de départ (la table) et ensemble d'arrivée (la vue) soit assuré par une fonction bijective.
    En gros cela veut dire qu'il faut que une ligne touchée par la mise à jour dans la vue corresponde à exactement une ligne dans la table d'arrivée.

    Dans le cadre de l'UNION, c'est condition n'est jamais satisfaite.... En effet à une ligne de la vue peut correspondre un ligne dans chaque table en UNION !

    Ni Oracle ni aucun autre SGBDR ne peut assumer une telle mise à jour. Il faut effectivement passer par un déclencheur INSTEAD OF

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/12/2010, 14h34
  2. Peut on mettre à jour une page jsp à partir d'un classe?
    Par TOPGUN89 dans le forum Websphere
    Réponses: 4
    Dernier message: 21/12/2006, 17h56
  3. Réponses: 1
    Dernier message: 15/09/2006, 11h24
  4. [SQL SERVER] Mettre à jour une base de donnée
    Par grellierj dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/05/2006, 11h33
  5. Mettre à jour une base sous SQL SERVER 2000
    Par FilipeVV dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 11/02/2005, 12h24

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