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

Requêtes PostgreSQL Discussion :

Vue sur 3 tables : transaction possible ?


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut Vue sur 3 tables : transaction possible ?
    Bonjour,

    J'ai les 3 tables suivantes dans ma bdd :
    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
    CREATE TABLE implication
    (
      implication_id serial NOT NULL,
      name character varying(20) NOT NULL,
      CONSTRAINT pk_implication PRIMARY KEY (implication_id)
    )
     
    CREATE TABLE "type"
    (
      type_id serial NOT NULL,
      name character varying(20) NOT NULL,
      CONSTRAINT pk_type PRIMARY KEY (type_id)
    )
     
    CREATE TABLE dod
    (
      dod_id serial NOT NULL,
      type_id integer,
      implication_id integer,
      name character varying(20),
      CONSTRAINT pk_dod PRIMARY KEY (dod_id),
      CONSTRAINT implication_id_fk FOREIGN KEY (implication_id)
          REFERENCES implication (implication_id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION,
      CONSTRAINT type_id_fk FOREIGN KEY (type_id)
          REFERENCES "type" (type_id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    )
    Et la vue suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR REPLACE VIEW dod_view AS 
     SELECT dod.name AS dod_name, type.name AS type_name, implication.name AS implication_name
       FROM dod, type, implication
      WHERE dod.type_id = type.type_id AND dod.implication_id = implication.implication_id;
    A l'heure actuelle, ma vue contient les éléments suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1 : "tchad";"NOUVELLE";"OTAN"
    2 : "senegal";"NOUVELLE";"UE"
    Je souhaite pouvoir effectuer des transactions directement sur cette vue.
    Je teste pour l'instant l'insertion mais je n'y arrive pas.
    Si je fais directement un insert ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into dod_view values ("france","NOUVELLE","UE");
    J'ai l'erreur suivante :
    ERROR: column "france" does not exist
    LINE 1: insert into dod_view values ("france","NOUVELLE","UE");
    Si je passe par la création d'une Rule, j'ai exactement la même erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR REPLACE RULE insert_dod_view AS
        ON INSERT TO dod_view DO INSTEAD  INSERT INTO dod (name, type_id, implication_id)  SELECT new.dod_name, type.type_id, implication.implication_id
               FROM dod, type, implication
              WHERE new.type_name::text = type.name::text AND new.implication_name::text = implication.name::text AND implication.implication_id = dod.implication_id AND type.type_id = dod.type_id;
    Pourriez vous m'aider ?

    Merci d'avance.
    WwAvE

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    INSERT INTO dod_view VALUES ("france","NOUVELLE","UE");
    Les valeurs litérales doivent être encadrées par des apostrophes, pas des guillemets.
    A cause des guillemets l'interpréteur SQL suppose qu'à l'intérieur c'est un nom de colonne.

  3. #3
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    Merci ! C'était si simple en fait....

    Nouveau problème pour l'insertion : ma Rule ne semble pas juste car il m'insère autant de lignes qu'il y en avait avant...

    J'ai fait la partie update aussi. Pour aider d'autres personnes, voilà ce que je fais.
    Création d'une Rule me permettant l'update :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE RULE update_dod_view AS
        ON UPDATE TO dod_view 
        DO INSTEAD  
            UPDATE dod 
            SET name = new.dod_name, type_id = type.type_id, implication_id = implication.implication_id
            FROM type, implication
            WHERE type.name = new.type_name AND implication.name = new.implication_name AND dod.name = old.dod_name;
    Merci encore !

  4. #4
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    Modification de ma Rule pour l'insertion (il y avait une référence à la table dod dans le FROM...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR REPLACE RULE insert_dod_view AS
        ON INSERT TO dod_view DO INSTEAD  INSERT INTO dod (name, type_id, implication_id)  SELECT new.dod_name, type.type_id, implication.implication_id
               FROM type, implication
              WHERE new.type_name::text = type.name::text AND new.implication_name::text = implication.name::text;
    Merci pour votre aide !
    WwAvE

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

Discussions similaires

  1. Vue sur plusieurs tables
    Par fhmayn dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2010, 10h21
  2. Création d'une vue sur des tables d'une base Oracle
    Par lcloatre dans le forum Requêtes
    Réponses: 0
    Dernier message: 21/04/2010, 15h41
  3. Vue sur une table : transaction possible ?
    Par wwave dans le forum Oracle
    Réponses: 6
    Dernier message: 11/01/2010, 16h10
  4. Vue sur deux tables
    Par stephane.julien dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/03/2008, 15h46
  5. Vue sur 2 tables de structures différentes
    Par thesmall dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/08/2007, 21h18

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