Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 16/05/2011, 12h07   #1
Invité de passage
 
Homme Christophe
Analyste d'exploitation
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Christophe
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Analyste d'exploitation
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 0
Points : 0
Par défaut Problème de nombre sur ma vue.

Bonjour,

Je crée une vue sous oracle comme ceci :
Code :
1
2
3
4
5
6
7
8
CREATE OR REPLACE VIEW vue_chauffeur(CalcPceColisagePerso,Date_BE,Code_Pro) AS SELECT sum(case when iad.unite_commande='C' then
iad.qte_commande*nvl(to_number(nvl(cpdc.colis_p,0),'9999.99'),0) else
iad.qte_commande*nvl(pdt.unite_colisage,0) end) AS CalcPceColisagePerso,
iae.date_be, iad.code_pro
FROM import_archives_detail iad, import_archives_entete iae, produit pdt, cadenciers_perso_det cpd, import_archives_detail_cpl iadc, cadenciers_perso_det_compl cpdc
WHERE iae.num_cde=iad.num_cde AND iae.code_cli=iad.code_cli AND iad.num_rayon=iae.num_rayon AND iad.code_pro=pdt.code_pro
AND iad.x_id_ligne_televente=iadc.x_id_ligne_televente AND iadc.d_id_cad_perso_det=cpd.id_cad_perso_det AND cpd.id_cad_perso_det=cpdc.id_cad_perso_det_c
AND iae.date_be=110516 GROUP BY iae.date_be, iad.code_pro;
La vue se crée sans soucis.
Mais la requête select me donne une erreur :

select * from vue_chauffeur
*
ERREUR à la ligne 1 :
ORA-01722: Nombre non valide

A savoir que la table cadenciers_perso_det_c n'a pas toujours un nombre correspondant au produit sur lequel je fais le calcul.
Et même avec une jointure (+) entre cpd et cpdc même erreur.

Quelqu'un pourrait il m'éclairer???

Merci beaucoup!
chrispilote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 13h32   #2
Invité de passage
 
Homme Christophe
Analyste d'exploitation
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Christophe
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Analyste d'exploitation
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 0
Points : 0
De plus, le champ cpdc.colis_p est de type char (ex: 3 colis) mais je dois récupérer la valeur numérique, donc j'ai essayé aussi de faire le nvl(cpdc.colis_p,'0') mais j'ai toujours la même erreur.
chrispilote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 13h59   #3
Invité de passage
 
Homme Christophe
Analyste d'exploitation
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Christophe
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Analyste d'exploitation
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 0
Points : 0
Ce sql fonctionne :

Code :
1
2
3
4
5
6
7
8
CREATE OR REPLACE VIEW vue_chauffeur(CalcPceColisagePerso,Date_BE,Code_Pro) AS SELECT sum(case when iad.unite_commande='C' then
iad.qte_commande*to_number(substr(cpdc.colis_p,0,2)) else
iad.qte_commande*nvl(pdt.unite_colisage,0) end) AS CalcPceColisagePerso,
iae.date_be, iad.code_pro
FROM import_archives_detail iad, import_archives_entete iae, produit pdt, cadenciers_perso_det cpd, import_archives_detail_cpl iadc, cadenciers_perso_det_compl cpdc
WHERE iae.num_cde=iad.num_cde AND iae.code_cli=iad.code_cli AND iad.num_rayon=iae.num_rayon AND iad.code_pro=pdt.code_pro
AND iad.x_id_ligne_televente=iadc.x_id_ligne_televente AND iadc.d_id_cad_perso_det=cpd.id_cad_perso_det AND cpd.id_cad_perso_det=cpdc.id_cad_perso_det_c
AND iae.date_be=110516 GROUP BY iae.date_be, iad.code_pro;
Je prend les 2 premiers caractères de cpdc_colis_p, mais c'est de la triche.
Il faut que je puisse extraire le nombre de ce char.
chrispilote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 14h29   #4
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Peut etre que le format de votre colis_p n'est pas correct, par exemple des "," au lieu de "." ...

Avez vous essayé ce genre de code ?

Code :
1
2
to_number(nvl(cpdc.colis_p,0),'9999.99','NLS_NUMERIC_CHARACTERS='',.'''
)
bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 15h29   #5
Invité de passage
 
Homme Christophe
Analyste d'exploitation
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Christophe
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Analyste d'exploitation
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 0
Points : 0
J'ai déjà le NLS_NUMERIC_CHARACTERS forcé dans la base de registre de oracle home avec "." ","
chrispilote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 18h44   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Citation:
Envoyé par chrispilote Voir le message
De plus, le champ cpdc.colis_p est de type char (ex: 3 colis) mais je dois récupérer la valeur numérique, donc j'ai essayé aussi de faire le nvl(cpdc.colis_p,'0') mais j'ai toujours la même erreur.
Et bien, l'erreur est ici, si vous avez ABC dans votre colonne, on ne peut pas convertir cette valeur en nombre.
C'est ce que vous explique Oracle.

Il faut que toute la colonne puisse être convertie en numérique pour pouvoir appliquer la fonction to_number.
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 21h59   #7
Invité de passage
 
Homme Christophe
Analyste d'exploitation
Inscription : mai 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Christophe
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Analyste d'exploitation
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : mai 2011
Messages : 5
Points : 0
Points : 0
Merci pour vos réponse.
J'opte donc pour le substr ça fonctionnera comme ça.

Merci.
chrispilote est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h02.


 
 
 
 
Partenaires

Hébergement Web