Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre habitué
    Homme Profil pro jean maury
    Inscrit en
    mars 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Nom : Homme jean maury
    Âge : 45
    Localisation : Pologne

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : mars 2009
    Messages : 154
    Points : 138
    Points
    138

    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.

  2. #2
    Expert Confirmé
    Inscrit en
    août 2008
    Messages
    2 146
    Détails du profil
    Informations forums :
    Inscription : août 2008
    Messages : 2 146
    Points : 3 745
    Points
    3 745

    Par défaut

    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

  3. #3
    Membre habitué
    Homme Profil pro jean maury
    Inscrit en
    mars 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Nom : Homme jean maury
    Âge : 45
    Localisation : Pologne

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : mars 2009
    Messages : 154
    Points : 138
    Points
    138

    Par défaut

    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

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •