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

Oracle Discussion :

[debutant]insert into view


Sujet :

Oracle

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut [debutant]insert into view
    Bonjour à tous,

    Voilà j'essaye d'insérer une ligne dans une vue et n'y arrivant pas je me demandais si c'était bien possible?

    Je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into vue_test2 ("nom", "prenom", "test1_id", "id", "adresse") values (toto, bob, 6,6, lourde)
    et ai l'erreur 11:22:37 [INSERT - 0 row(s), 0.005 secs] [Error Code: 984, SQL State: 42000] ORA-00984: Un nom de colonne n'est pas autorisé ici
    ... 1 statement(s) executed, 0 row(s) affected, database exec time 0.005 sec [0 successful, 0 warnings, 1 errors]

    Merci de votre aide
    seb

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est impossible de faire une insertion dans une vue qui contient plus d'une table. Ou alors en passant par un trigger INSTEAD OF qui va faire la mise en jour dans les tables qui vont bien

  3. #3
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Tes chaînes de caractères doivent être entre simple côtes
    exemple : 'toto'

  4. #4
    Membre Expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Par défaut
    Bonjour,

    1. On ne peut pas faire des insertions ou des mises à jours dans une Vue
    2. remplace ("nom", "prenom", "test1_id", "id", "adresse")
    par (nom, prenom, test1_id, id, adresse)

  5. #5
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par bouyao
    1. On ne peut pas faire des insertions ou des mises à jours dans une Vue
    Pas d'accord :
    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
    SQL> create table a (a number);
    Table created.
     
    SQL> insert into a values (1);
    1 row created.
     
    SQL> create view v as select a from a;
    View created.
     
    SQL> insert into v values (2);
    1 row created.
     
    SQL> select * from v;
            A
    ---------
            1
            2

  6. #6
    Membre Expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Par défaut
    Ok
    et pour une vue contenant plusieurs tables ?

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut
    Merci pour vos réponses. Pour les ", ' , , j'ai tout essayé l'erreur reste la même.
    Sinon j'ai effectivement fait le trigger suivant :
    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
    create or replace trigger tr_test3 instead of insert on vue_test2
    begin 
        insert into test1
            (id, adresse)
            values (
                :new.test1_id
                :new.adresse);
        insert into test2
            (id, nom, prenom, test1_id)
            values (
                :new.id
                :new.nom,
                :new.prenom,
                :new.test1_id);
    end;
    Et j'esperais qu'en insérant une ligne dans la vue la table test1 et test2 soient mises à jour

  8. #8
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par bouyao
    Ok
    et pour une vue contenant plusieurs tables ?
    Via un trigger instead off, comme l'a dit Fred

  9. #9
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Pour moi cela n'a rien avoir au fait qu'il s'agisse d'une vue :
    ORA-00984: column not allowed here
    Cause: A column name was used in an expression where it is not permitted, such as in the VALUES clause of an INSERT statement.
    Action: Check the syntax of the statement and use column names only where appropriate
    Pour moi la bonne syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into vue_test2 (nom, prenom, test1_id, id, adresse) 
    values ('toto', 'bob', 6,6, 'lourde');
    Qu'est-ce que cela donne sous SQL*Plus ?

  10. #10
    Membre Expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Par défaut
    Citation Envoyé par plaineR
    Via un trigger instead off, comme l'a dit Fred

    Par contre Dans certains cas on peut modifier une vue qui contient plusieurs tables.
    A modifiable join view is a view that contains more than one table in the top
    level FROM clause of the SELECT statement, and that does not contain any of
    the following:

    - DISTINCT operator
    - aggregate functions: AVG, COUNT, GLB, MAX, MIN, STDDEV, SUM, or VARIANCE
    - set operations: UNION, UNION ALL, INTERSECT, MINUS
    - GROUP BY or HAVING clauses
    - START WITH or CONNECT BY clauses
    - ROWNUM pseudocolumn

    With some restrictions, you can modify views that involve joins. If a view is
    a join on other nested views, then the other nested views must be mergeable
    into the top level view.

  11. #11
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into vue_test2 (nom, prenom, test1_id, id, adresse) values ('toto', 'bob', 6,6, 'lourde')
    ça donne l'erreur
    11:59:32 [INSERT - 0 row(s), 0.005 secs] [Error Code: 4098, SQL State: 42000] ORA-04098: Déclencheur 'EXO_ISYS.TR_TEST3' non valide. Echec de la revalidation
    ... 1 statement(s) executed, 0 row(s) affected, database exec time 0.005 sec [0 successful, 0 warnings, 1 errors]

    Là on m'appelle pour aller manger, je posterai mes deux tables et la vue à mon retour mais ça va ressembler à du debbugage donc désolé et svp m'engueulais pas

  12. #12
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    show err après la création du trigger

  13. #13
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par gapse
    ça donne l'erreur
    11:59:32 [INSERT - 0 row(s), 0.005 secs] [Error Code: 4098, SQL State: 42000] ORA-04098: Déclencheur 'EXO_ISYS.TR_TEST3' non valide. Echec de la revalidation
    ... 1 statement(s) executed, 0 row(s) affected, database exec time 0.005 sec [0 successful, 0 warnings, 1 errors]
    1. Cela ne ressemble pas à une erreur SQL*Plus
    2. Ce n'est pas la même erreur
    => regarde le statut de ton trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select trigger_name, status from all_triggers where trigger_name = 'TR_TEST3';
    et pendant que tu y es regarde les erreurs de ton trigger sous SQL*Plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show err trigger tr_test3

  14. #14
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut
    Désolé j'ai oublié de le préciser mais je n'utilise pas sql+ mais dbvisualizer.

    Le statut de mon trigger est ENABLED.

    pour que ce soit plus clair voici mes tables et la vue:

    la vue:

    NOM PRENOM TEST1_ID ID ADRESSE
    b sebastien 1 1 gap
    c pierre 1 2 gap
    d carine 2 3 marmande
    e seb 3 4 loic
    f laura 1 5 gap

    table test1:

    ID ADRESSE
    1 gap
    2 marmande
    3 loic

    table test2:

    ID NOM PRENOM TEST1_ID
    1 b sebastien 1
    2 c pierre 1
    3 d carine 2
    4 e seb 3
    5 f laura 1



    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show err trigger tr_test3
    est renvoyé comme une commande sql non valide

    Encore merci de vos réponses

  15. #15
    Membre Expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Par défaut
    Peut-on avoir le script de création de la vue ?
    Essaye de relancer la requette corrigé sans utiliser le trigger.

  16. #16
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    merci de retenter sous SQL*Plus si possible, sinon, trouve les erreurs dans DBA_ERRORS

  17. #17
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut
    le script de création de la vue est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create view vue_test2 as select T.nom, T.prenom, T.test1_id, C.adresse
             from test1 C, test2 T
              where T.test1_id=C.id;
    sinon je comprend pas bien pq tu veux que je lance la requête sur la vue sans le trigger. vous m'avez tous dit qu'on ne peut pas faire un insert sur un vue ce rapportant à plusieurs tables

  18. #18
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut
    Je suis désolé mais je ne peux pas avoir sql+, je vais essayer de chercher dans DBA_ERRORS quand j'aurais trouvé où c'est.

  19. #19
    Membre Expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Par défaut
    Citation Envoyé par gapse
    le script de création de la vue est:
    sinon je comprend pas bien pq tu veux que je lance la requête sur la vue sans le trigger. vous m'avez tous dit qu'on ne peut pas faire un insert sur un vue ce rapportant à plusieurs tables

    desolé, dans certains cas on peut (erreur de ma part )
    dans ton cas je pense que ca marchera.

  20. #20
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut
    non vous aviez raison ça ne marche pas :

    14:39:30 [INSERT - 0 row(s), 0.042 secs] [Error Code: 1776, SQL State: 42000] ORA-01776: Impossible de modifier plus d'une table de base via une vue jointe
    ... 1 statement(s) executed, 0 row(s) affected, database exec time 0.042 sec [0 successful, 0 warnings, 1 errors]

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [debutant] commande "insert into " en VB.NET
    Par Hello_World dans le forum ASP.NET
    Réponses: 2
    Dernier message: 19/04/2009, 01h30
  2. [debutant]insert into select
    Par christopheEU dans le forum Développement
    Réponses: 2
    Dernier message: 14/11/2008, 10h22
  3. [MySQL][Debutant] "unknow field" avec "INSERT INTO"
    Par L3gion dans le forum Langage SQL
    Réponses: 8
    Dernier message: 12/12/2006, 11h15
  4. [VB.NET]Utiliser un INSERT INTO avec une VIew Access
    Par Ashleyriot dans le forum Accès aux données
    Réponses: 3
    Dernier message: 23/11/2006, 18h31
  5. Réponses: 18
    Dernier message: 01/10/2006, 19h17

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