[Oracle] Probleme de DML + table imbriquée

Probleme de DML + table imbriquée [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 20-02-2006 à 19:25:45    

:hello:  
 
J'ai un probleme pour mettre à jour une table imbriquée dans Oracle.
Voici comme sont construites les tables:
 

Code :
  1. //le type salaire
  2. CREATE TYPE TSalaire AS OBJECT
  3. (
  4. mois NUMBER(2),
  5. montant NUMBER(6)
  6. )
  7. //le type liste de salaire
  8. CREATE TYPE LTSalaire AS VARRAY(12) OF TSalaire ;
  9. //le type employe
  10. CREATE TYPE TEmploye AS[cpp] OBJECT
  11. (
  12. id_emp NUMBER(5),
  13. nom_emp VARCHAR2(50),
  14. prenom_emp VARCHAR2(50),
  15. code_emp VARCHAR2(10),
  16. date_nais DATE,
  17. lieu_nais VARCHAR2(50),
  18. adresse VARCHAR2(255),
  19. num_tel NUMBER(20),
  20. salaire LTSalaire
  21. )


 
Le but est de mettre a jour le salaire pour un mois donnée:
 

Code :
  1. UPDATE TABLE ( SELECT employe.salaire  FROM employe WHERE employe.id_emp = 2) TS SET montant = 2  WHERE mois = 5


 
L'erreur : ( l'étoile doit se trouver sous le 'm' de "SET montant" )
 

Code :
  1. UPDATE TABLE ( SELECT employe.salaire  FROM employe WHERE employe.id_emp = 22) TS SET montant = 1000
  2.                                                                                       *
  3. ERREUR à la ligne 1 :
  4. ORA-25015: impossible d'effectuer un DML sur cette colonne de vue de table
  5. imbriquée


Message édité par ffomnislash le 20-02-2006 à 19:26:51
Reply

Marsh Posté le 20-02-2006 à 19:25:45   

Reply

Marsh Posté le 20-02-2006 à 21:21:48    

Je me demande à quoi sert le TS qui se trouve avant SET.
Peut-être qu'en enlevant, cela marcherait.

Reply

Marsh Posté le 21-02-2006 à 02:23:33    

c'est sensé donner un nom a la table afin de pouvoir y faire reference par la suite (TS pour table salaire). Je vais tt de meme tester sans mais plus maintenant ^^
 
 
edit --
J'ai testé sans le "TS" et le probleme persiste :/


Message édité par ffomnislash le 21-02-2006 à 13:26:22
Reply

Marsh Posté le 21-02-2006 à 13:38:36    

Domage que ça n'ait pas marché.
Essayons autre chose. Par exemple, pourquoi pas :

Code :
  1. UPDATE employe
  2.    SET employe.montant = 1000
  3. WHERE employe.id_emp = 22

Reply

Marsh Posté le 22-02-2006 à 16:34:40    

Cette update ne selectionne pas un mois en particulier.
 
Et employe.montant est un identificateur invalide.
 

Reply

Marsh Posté le 22-02-2006 à 19:44:59    

Reprenons au début :
 
dans la table employe tu as à la fois salaire et montant ?
 
Si c'est le cas :
 

Code :
  1. UPDATE (SELECT employe.salaire,
  2.                employe.montant
  3.         FROM employe
  4.         WHERE employe.id_emp = 2
  5.         AND mois = 5)
  6. SET montant = 2;


 
S'il n'y a que le champ salaire, et que tu as inventé montant (et c'est ce que tes commentaires portent à croire ...) :
 

Code :
  1. UPDATE (SELECT employe.salaire
  2.         FROM employe
  3.         WHERE employe.id_emp = 2
  4.         AND mois = 5)
  5. SET montant = 2;


 
ou encore (passe-partout) :
 

Code :
  1. UPDATE (SELECT *
  2.         FROM employe
  3.         WHERE employe.id_emp = 2
  4.         AND mois = 5)
  5. SET montant = 2;


Message édité par Beegee le 22-02-2006 à 19:46:31
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed