IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Replace in Function for SQL*Loader


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 23
    Points : 14
    Points
    14
    Par défaut Replace in Function for SQL*Loader
    Bonjour à tous,

    J'ai un petit soucis de conversion de données.

    Je cherche à insérer dans un champs DEC(18,2) une donnée depuis un fichier plat via SQL*Loader.

    malheureusement, contient des séparateurs de milliers sous forme de points et un séparateur de millier sous forme de virgule: 1.000.000,10
    Je souhaite une sortie de type: 1000000.10

    Pour se faire, j'ai créé une fonction de ce type:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    CREATE or REPLACE
    FUNCTION str_ratio_convert(w_str_orig IN VARCHAR2) RETURN VARCHAR2 IS
     
    w_result_str LONG;
     
    BEGIN
     
    w_result_str :='';
     
    IF LENGTH(w_str_orig) > 0 THEN
     
    -- Remove dot (.)
    w_result_str := REPLACE(w_str_orig,'.','');
    -- Replace coma (,) per dot (.)
    w_result_str := REPLACE(w_result_str,',','.');
     
    ELSE
    END IF;
     
    RETURN w_result_str;
     
     
    END str_ratio_convert;
     
     
    /
     
    exit;
    Et je l'insère dans mon SL*Loader ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UMSAV "str_ratio_convert(UMSAV)",
    Mais j'ai systématiquement une erreur ORA-06575: Package or Function str_ratio_convert is in an invalid state.

    J'ai essayé en faisant une soirtie en DEC, mais il n'aime pas.
    J'ai tenté en mettant dans SQL*Loader deux points avant le nom de mon champs, mais il n'aime pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UMSAV "str_ratio_convert(:UMSAV)",
    J'ai vraiment besoin d'un coup de main sur ce problème sachant que je ne peux pas toucher à la configuration d'ORACLE.

    Merci beaucoup pour votre aide.

    sOnO

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Amis,

    On a finalement réussi en concatenant le REPLACE dans le SQL*Loader:

    UMSAV "REPLACE(REPLACE(:UMSAV,'.',''),',','.'))",
    Cela dit, la réponse m'intéresse quand même, je ne comprend pas où j'ai fait fausse route.

    Cordialement

    sOnO

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 23
    Points : 14
    Points
    14
    Par défaut [Résolu] Replace in Function for SQL*Loader
    OK, j'ai fini par mettre le doigt sur le problème:

    PL/SLQ n'aime pas les ELSE sans rien. Ca génèrait une erreur de compilation. Avec cette modification: plus de soucis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    CREATE OR REPLACE
    FUNCTION str_ratio_convert(w_str_orig IN VARCHAR2) RETURN VARCHAR2 IS
     
    w_result_str LONG;
     
    BEGIN
     
    w_result_str :='';
     
    IF LENGTH(w_str_orig) > 0 THEN
     
    -- Remove dot (.)
    w_result_str := REPLACE(w_str_orig,'.','');
    -- Replace coma (,) per dot (.)
    w_result_str := REPLACE(w_result_str,',','.');
     
    END IF;
     
    RETURN w_result_str;
     
    END str_ratio_convert;
     
    /
     
    exit;

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

Discussions similaires

  1. Chargement de fichier par SQL LOADER
    Par davy.g dans le forum SQL*Loader
    Réponses: 17
    Dernier message: 15/11/2004, 13h08
  2. SQL LOADER
    Par velo83 dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 25/10/2004, 08h24
  3. Appel de function en SQL Dynamique
    Par dkd dans le forum Oracle
    Réponses: 22
    Dernier message: 28/09/2004, 18h01
  4. Réponses: 4
    Dernier message: 10/06/2004, 18h05
  5. erreur sql loader et performance
    Par mobisky dans le forum SQL*Loader
    Réponses: 14
    Dernier message: 20/08/2003, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo