Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 03/12/2012, 10h03   #1
jj4822
Membre habitué
 
Homme jean maury
Inscription : mars 2009
Messages : 137
Détails du profil
Informations personnelles :
Nom : Homme jean maury
Âge : 43
Localisation : Pologne

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : mars 2009
Messages : 137
Points : 123
Points : 123
Par défaut Rajouter des 0 en début en fonction du nombre de caractères du champ

Bonjour.

Je cherche, par requete sql, a cadrer entre un nr dans le module factures d'Oracle Financial et le nr equivalent dans le module comptabilite genererale d'Oracle Financial.

Cote AP (module factures), le champ contient des 0 de facon a arriver a 9 caracteres. Dans le module GL (comptabilite generale), le champ contient uniquement le nr.

Par exemple dans AP j'ai 000012546 et dans GL j'ai 12546

De temps a autre, le champ a ete mal alimente et contient des caracteres non numeriques. Exemple 12546. ou une date au lieu du nr

Je cherche a faire apparaitre les ecarts montants (ou l'absence du nr cote GL) entre AP et GL.

J'ai deux solutions pour le faire :

1) to_number sur chaque champ (cote AP et cote GL) : si le champ contient un caractere non numerique, la requete tombe en erreur

2) rajouter des 0 dans le champ cote GL.

Pour faire ce point 2), j'ai, dans le select, rajoute la chose suivante :

Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT
......
(case length(gl.ATTRIBUTE14) when 1 then lpad(gl.ATTRIBUTE14,0,8) when 2 then lpad(gl.ATTRIBUTE14,0,7) when 3 
then lpad(gl.ATTRIBUTE14,0,6) when 4 then lpad(gl.ATTRIBUTE14,0,5) 
when 5 then lpad(gl.ATTRIBUTE14,0,4) when 6 then lpad(gl.ATTRIBUTE14,0,3)  
when 7 then lpad(gl.ATTRIBUTE14,0,2) when 8 then lpad(gl.ATTRIBUTE14,0,1) else gl.ATTRIBUTE14)
FROM
 
WHERE
J'avais aussi essaye :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
SELECT
......
(case gl.ATTRIBUTE14 when length(gl.ATTRIBUTE14) = 1 then lpad(gl.ATTRIBUTE14,0,8) when length(gl.ATTRIBUTE14) = 2 then lpad(gl.ATTRIBUTE14,0,7) when length(gl.ATTRIBUTE14) = 3 
then lpad(gl.ATTRIBUTE14,0,6) when length(gl.ATTRIBUTE14)=4 then lpad(gl.ATTRIBUTE14,0,5) 
when length(gl.ATTRIBUTE14)=5 then lpad(gl.ATTRIBUTE14,0,4) when length(gl.ATTRIBUTE14)=6 then lpad(gl.ATTRIBUTE14,0,3)  
when length(gl.ATTRIBUTE14)=7 then lpad(gl.ATTRIBUTE14,0,2) when length(gl.ATTRIBUTE14)=8 then lpad(gl.ATTRIBUTE14,0,1) else gl.ATTRIBUTE14)
FROM
 
WHERE
Apres avoir fait differents essais dans Toad qui m'a annonce un "missing keyword", j'ai essaye la chose suivante :

Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT
------
(case length(gl.ATTRIBUTE14) when 1 then lpad(gl.ATTRIBUTE14,0,8) when 2 then lpad(gl.ATTRIBUTE14,0,7) when 3 
then lpad(gl.ATTRIBUTE14,0,6) when 4 then lpad(gl.ATTRIBUTE14,0,5) 
when 5 then lpad(gl.ATTRIBUTE14,0,4) when 6 then lpad(gl.ATTRIBUTE14,0,3)  
when 7 then lpad(gl.ATTRIBUTE14,0,2) when 8 then lpad(gl.ATTRIBUTE14,0,1) else lpad(gl.ATTRIBUTE14,0,0))
FROM
 
WHERE
J'ai encore le message "Missing keyword".

Comment puis-je resoudre mon probleme et rajouter des 0 pour que le champ nr dans GL ait le meme format que celui dans AP et, ainsi, cadrer ?

Merci.
Cdlt.
jj4822 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 11h47   #2
skuatamad
Expert Confirmé
 
Inscription : août 2008
Messages : 1 690
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 690
Points : 2 812
Points : 2 812
Pas besoin de se prendre la tête LDAP gère la taille automatiquement :
Code :
1
2
3
4
5
SQL> SELECT lpad(12546,9,0) FROM dual;
 
LPAD(1254
---------
000012546
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 03/12/2012, 13h42   #3
jj4822
Membre habitué
 
Homme jean maury
Inscription : mars 2009
Messages : 137
Détails du profil
Informations personnelles :
Nom : Homme jean maury
Âge : 43
Localisation : Pologne

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : mars 2009
Messages : 137
Points : 123
Points : 123
Merci pour cette reponse. Je vais l'utiliser pour simplifier ma requete.

J'ai trouve pourquoi j'avais un probleme : le end avant la parenthese de fermeture n'etait pas present.

Merci.

Cdlt
jj4822 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h21.


 
 
 
 
Partenaires

Hébergement Web