probleme pl/sql ?

probleme pl/sql ? - SQL/NoSQL - Programmation

Marsh Posté le 29-03-2006 à 20:47:57    

Salut,
 
Je dispose d'un table produit et une autre table produit2.
Je veux inserer le contenu de la table produit dans la table produit2.
pour cela j'ai fait un code pl/sql;
 

Code :
  1. declare
  2. tot integer;
  3. cursor prod is select num,desi,prix  from produit;
  4. nuplet prod%rowtype;
  5. zero exception;
  6. begin
  7. select count(*) into tot from produit;
  8. if tot=0 then
  9. raise zero;
  10. else
  11. for nuplet in prod loop
  12. insert into produit2  values(nuplet.num,upper(nuplet.desi),round(nvl(nuplet.prix,0)*6.55));
  13. end loop;
  14. end if;
  15. exception
  16. when zero then insert into produit2 values(0,'Pas de produit',NULL);
  17. end;
  18. /

 

mais quand je le lance j'ai cette erreur;
 

Citation :

 

declare
*
ERREUR à la ligne 1 :
ORA-01438: valeur incohérente avec la précision indiquée pour cette colonne
ORA-06512: à ligne 14

 


 

je n'arrive pas à la comprendre.
car quand ma table produit est vide ma table produit2 se rempli mais quand elle est pleine j'ai cette erreur.
 
Merci.

Reply

Marsh Posté le 29-03-2006 à 20:47:57   

Reply

Marsh Posté le 29-03-2006 à 20:57:12    

Je suis un peu étonné de ne pas voir d'instruction fetch, mais c'est peut-être normal.

Reply

Marsh Posté le 29-03-2006 à 22:04:15    

Tu as beaucoup de données dans la table produit ?
 
Si tu n'en as pas trop, du SQL de base suffit ...
 
insert into produit2
select num,upper(desi),round(nvl(prix,0)*6.55))
from produit;

Reply

Marsh Posté le 29-03-2006 à 22:42:01    

je n'en ai pas beaucoup,
c 'est clair que je pourrai le faire directement avec du sql;
mais je fait sa pour m'entrainer au pl/sql

Reply

Marsh Posté le 30-03-2006 à 12:42:45    

c'est un problème de structure de table... que donne un DESC produit et DESC produit2.
 
Attention, ton count(*) risque de couter cher pour des requêtes peu performante. Je te conseille plutôt de tester prod%ROWCOUNT ou d'ajouter une variable de test que tu mets à 1 dans la boucle FOR ;)

Reply

Marsh Posté le 30-03-2006 à 14:54:05    

merci en ecoutant tes conseils j'ai regarder le type de ma colonne prix ,c'etait number(3,2) et donc elle ne pouvait pas contenir les nouvelles valeurs si je multipliais par 6.55957.donc j'ai modifier le type en numeric;
 
et sur ce site mon erreur est expliqué aussi
http://www.techonthenet.com/oracle/errors/ora01438.php

Reply

Marsh Posté le 30-03-2006 à 14:58:14    

très bien ce site :)

Reply

Sujets relatifs:

Leave a Replay

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