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

Oracle Discussion :

Comment utiliser to_number qvec un select ?


Sujet :

Oracle

  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 17
    Par défaut Comment utiliser to_number qvec un select ?
    Bonjour j'ai la requete suivante
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    insert into GDIEXP.t_application
    (id_appl,
    nom_application_appl,
    version_application_appl,
    desc_application_appl,
    criticite_appl,
    ind_online_appl,
    ind_libreservice_appl,
    ind_chiffrement_appl,
    ind_licencecpu_appl,
    ind_partitionnement_appl,
    ind_heterogeneous_appl,
    commentaires_appl,
    ind_scz_appl,
    ind_clisrv_appsrv_appl,
    particularite_appl,
    categorie_appl,
    silo_appl,
    date_dern_maj_ctrl,
    code_usager_ctrl)
     
    select 
    ID_APPLICATION_APPL,
    Nom_application_appl,
    Version_Application_appl,
    desc_application_appl,
    criticite,
    ind_online,
    ind_libreservice,
    ind_chiffrement,
    ind_licencecpu,
    ind_partitionnement,
    ind_heterogeneous,
    commentaires,
    ind_scz,
    ind_clisrv_appsrv,
    particularite,
    categorie, 
    silo,
    date_dern_maj_ctrl,
    code_usager_ctrl
    from GDIPROD.t_application ;
    Or il y une erreure car ind_clisrv_appsrv_appl est number et ind_clisrv_appsrv est en caractere. Je sais que to number fait la conversion mais j'ai essayé de mettre to_number avant avant ind_clisrv_appsrv dans la clause select mais ca ne donne rien. Est ce que je dois utiliser du pl sql (je suis sur oracle), déclarer une variable et y mettre le résultat du tout number ?

    Les charactères sont A ou C.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 11
    Par défaut
    Attention, la fonction to_number() sert à convertir une chaine numérique en nombre, pas de l’alphanumérique, pas de caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select to_number('123') from dual; ok
    select to_number('A') from dual; ORA-01722:	invalid number

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 17
    Par défaut
    donc je devrais faire fonction pl sql avec un loop qui pour chaque valeur a ou c atrribuerait un 0 ou 1 a une certaine variable qui elle serait mise dans la colonne ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 11
    Par défaut
    Oui ou quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_number(TRANSLATE ('AC','AC','01')) from dual;
    Essaye:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_number(TRANSLATE (ind_clisrv_appsrv,'AC','01'))

  5. #5
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 17
    Par défaut
    Voici ce que j'ai fait
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    declare
    clisrv_appsrv_appl number(1);
    cursor c is 
    select * from gdiprod.t_application;
    t_application c%ROWTYPE;  
     
    begin
    open c;
    loop
      fetch c into  t_application;
      if t_application.ind_clisrv_appsrv ='a'
        then clisrv_appsrv_appl:=0; 
     
      elsif 
          t_application.ind_clisrv_appsrv ='c'
         then  
          clisrv_appsrv_appl:=1;
       end if;
       insert into    gdiexp.t_application 
       (id_appl,
       nom_application_appl,
       version_application_appl,
       desc_application_appl,
       criticite_appl,
       ind_online_appl,
        ind_libreservice_appl,
        ind_chiffrement_appl,
        ind_licencecpu_appl,
        ind_partitionnement_appl,
        ind_heterogeneous_appl,
        commentaires_appl,
        ind_scz_appl,
        ind_clisrv_appsrv_appl,
        particularite_appl,
        categorie_appl,
        silo_appl,
        date_dern_maj_ctrl,
        code_usager_ctrl) 
     
        values (t_application.ID_APPLICATION_APPL,
        t_application.Nom_application_appl,
        t_application.Version_Application_appl,
        t_application.desc_application_appl,
        t_application.criticite,
        t_application.ind_online,
        t_application.ind_libreservice,
        t_application.ind_chiffrement,
        t_application.ind_licencecpu,
        t_application.ind_partitionnement,
        t_application.ind_heterogeneous,
        t_application.commentaires,
        t_application.ind_scz,
        clisrv_appsrv_appl,
        t_application.particularite,
        t_application.categorie, 
        t_application.silo,
        t_application.date_dern_maj_ctrl,
        t_application.code_usager_ctrl
        );
    end loop;
    close c;
    commit;
    end;
    Mais ca me donne ce message d'erreur: ORA-00001: Violation de la contrainte unique () ora 06512 a la ligne 19. C'est bizarre mais la colonne de la table d'ou on extrait la table est est défini comme unique, donc comment se peut il qu'il me donne ce message ?

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    donc comment se peut il qu'il me donne ce message ?
    ORA-00001: Violation de la contrainte unique () ora 06512 a la ligne 19
    Nous ne pourrons pas vraiment t'aider sur la question.
    - Vérifie la PK de la table destination
    - Vérifie les données retournées par le curseur

    As-tu vérifier ce que ramène la requête SELECT de ton curseur ?
    Y a t-il des doublons ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/08/2009, 17h05
  2. comment utiliser une valeur d'un champs dans un select ?
    Par cholopat dans le forum Requêtes
    Réponses: 10
    Dernier message: 20/06/2009, 08h15
  3. Comment utiliser selected path
    Par Lechette dans le forum VB.NET
    Réponses: 8
    Dernier message: 16/11/2008, 17h14
  4. Réponses: 4
    Dernier message: 30/08/2008, 01h39
  5. comment utiliser un select
    Par savoir dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/01/2008, 13h24

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