Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/03/2006, 19h34   #1
Membre du Club
 
Inscription : mars 2005
Messages : 277
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 277
Points : 42
Points : 42
Par défaut problem pl/sql

salut,

J'ai 2 tables, produit et produit2;
donc je fais un bloc pl/sql pour inserer le contenu de ma table produit dans la table produit2 en effectuant quelque modification ;

voila mon bloc
Code :
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
declare
 
euro constant real:= 6.55957;
tot integer;
cursor prod IS SELECT * FROM produit;
nuplet prod%rowtype;
zero exception;
 
begin
 
 
SELECT count(*) INTO tot FROM produit;
 
IF tot=0 then
raise zero;
else
FOR nuplet IN prod loop
INSERT INTO produit2 VALUES(nuplet.num,upper(nuplet.desi),round(nvl(nuplet.prix,0)*euro));
end loop;
end IF;
 
exception
when zero then INSERT INTO produit2 VALUES(0,'Pas de produit',NULL);
end;
/
mon code à l'air correct mais pourtant cela ne fonctionne pas et 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 18
merci.
Melvine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2006, 19h53   #2
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
1ère règle : dans un SELECT ou INSERT on doit TOUJOURS préciser les colonnes même si syntaxiquement cela ne déclenche pas d'erreur de les omettre.
Code :
cursor prod IS SELECT * FROM produit;
Code :
INSERT INTO produit2 VALUES ..
2nd règle : quand on cherche à savoir s'il y existe des enregistrements (en peu importe que la réponse soit 1, 2 ou 10690) on ne fait pas de count(*) mais une gestion d'exception avec NO_DATA_FOUND
Code :
1
2
3
SELECT count(*) INTO tot FROM produit;
 
IF tot=0 then
3ème règle : quand on demande de debugger du code (ce qui n'est pas le but d'u forum d'entre-aide !), on donne aux lecteurs un jeu d'essai complet leur permettant de reproduire le problème.
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h57.


 
 
 
 
Partenaires

Hébergement Web