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 :

Vue modifie la table d'origine


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 44
    Par défaut Vue modifie la table d'origine
    Bonjour,

    Pourquoi lorsqu'on fait un UPDATE sur une vue, la table d'origine est aussi modifiée ? (d'après ce que je viens de constater avec mon code, et après recherche sur internet)
    Comment éviter cela ? En effet, je teste mon SQL en utilisant la vue (pour éviter d'avoir à supprimer/recréer la table) et j'aimerais bien que cela ne modifie pas la table d'origine (en tout cas, pour l'instant).

    Autre question : comment modifier toutes les colonnes d'un coup avec le SQL car mon code ci-dessous ne marche que pour une variable. Remplacer NOMVARIABLE par * conduit à une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE ONLY BD.NOMVUE
       SET NOMVARIABLE = trim('=' from NOMVUE.NOMVARIABLE);
    Merci...

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    C'est tout à fait normal : la vue est une mise à disposition des données d'une ou plusieurs tables, ce n'est finalement qu'une requête stockée.
    Si vous consultez le DDL de création de la vue vous verrez quelque chose comme :
    CREATE VIEW MA_VUE AS SELECT COL1, COL2, ..., COLn FROM MA_TABLE.

    EDIT cas particulier : la vue matérialisée qui stocke en cache les données de la table, mais même dans ce cas, la mise à jour via la vue affecte aussi la table, soit immédiatement, soit de façon différée

    Pour mettre à jour plusieurs colonnes de la table, il faut les citer dans l'ordre UPDATE comme suit :
    UPDATE MA_VUE SET COL1=@Var1, COL2=@Var2 ..., COLn=@Varn WHERE condition....

    * ne peut s'appliquer qu'au SELECT, mais il ne faut jamais l'utiliser dans un traitement

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 44
    Par défaut
    merci Escartefigues! Cependant, je n'ai pas compris la dernière phrase :
    * ne peut s'appliquer qu'au SELECT, mais il ne faut jamais l'utiliser dans un traitement
    l'* ne renvoie pas à une * dans le texte précédent... Merci

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Je voulais dire que l'on peut utiliser l'étoile dans un SELECT: SELECT * FROM... mais pas dans un UPDATE et qu'il ne faut jamais utiliser l'étoile dans une requête pérenne.

    Select * est contre performant, il transporte des colonnes inutiles ce qui crée de la charge réseau et compromet l'usage d'index couvrants
    Select * est dangereux car le résultat est soumis aux modifications de structure des vues ou tables

    Select * est interdit sur de nombreux sites en production pour les raisons qui précèdent

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 44
    Par défaut
    merci!
    J'ai 200 variables et rajouter un trim(...) à chacune va prendre un temps fou. Est-ce que tenter d'écrire une boucle serait possible ? Du type "parcourir la table variable par variable, si "=" est présent en début de cellule, supprimer "=" ?"
    Je vous demande car en Javascript, ce type de boucle existe mais en SQL, je n'ai rien trouvé sur le sujet. Merci
    Rq : dp mon 1er message, j'ai précisé dans le UPDATE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET VARIABLE = trim(leading '=' from VARIABLE);

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Si vous ne savez pas quelles sont les colonnes qui contiennent le caractère "=" à supprimer, il faut alors construire une première requête qui extrait du catalogue toutes les colonnes de type text, char, varchar... susceptibles de contenir ce caractère, puis, à partir de la table résultante, faire une requête en SQL dynamique qui va réaliser les mises à jour

    Mais attention, selon la taille de vos tables, vu qu'à priori vous n'avez pas de critère de filtrage, ça risque de prendre un temps considérable !

    Note : les variables sont des valeurs liées aux traitements, les champs sont des zones de formulaire, dans une table il y a des colonnes

Discussions similaires

  1. Modifier une table par l'intermédiaire d'une vue
    Par marineJ dans le forum Requêtes
    Réponses: 8
    Dernier message: 28/12/2017, 13h09
  2. Réponses: 2
    Dernier message: 06/10/2009, 13h13
  3. vue propre ou table crade ? that's the question
    Par Maitre B dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 10/11/2004, 16h19
  4. Récupérer la table d'origine du champs
    Par adelavarenne dans le forum Bases de données
    Réponses: 7
    Dernier message: 02/04/2004, 15h38
  5. [vb6] Modifier structure table Access sous VB6
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 25/03/2004, 17h45

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