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

PL/SQL Oracle Discussion :

PL/SQL requete sql


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut PL/SQL requete sql
    Bonjour,

    Je souhaite faire une requête dont l'objet est d'insérer des données dans une table X avec 11 champs à partir d'un select de 14 champs de 6 tables. Pour ce faire, j'ai concaténé 4 champs des 14 champs pour en faire que 11.
    Voici la requete :

    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
    INSERT INTO TABLE_X (A, B, C, 
    D,E, F, G, H, I,
    J, FUSION_K_L_E_F)
    SELECT 	TABLE_W.A,
    	TABLE_S.B,
    	TABLE_T.C,
    	TABLE_U.D,
    	TABLE_V.E,
    	TABLE_V.F,
    	TABLE_V.G,
    	TABLE_R.H,
    	TABLE_W.I,
    	TABLE_S.J,
    	TABLE_T.K|| 
    	TABLE_U.L|| _ ||
    	TABLE_V.E|| _ ||
    	TABLE_V.F
    		
    FROM TABLE_R,TABLE_S,TABLE_T,TABLE_U,TABLE_V,TABLE_W 
    
    WHERE TABLE_R.SS_CLE=TABLE_W.SS_CLE
    AND TABLE_S.AA_CLE = TABLE_W.AA_CLE 
    AND TABLE_V.SI_CLE = TABLE_S.SI_CLE 
    AND TABLE_V.DD_CLE=TABLE_T.DD_CLE 
    AND TABLE_V.CC_CLE=TABLE_U.CC_CLE ;
    Par rapport à cette requête, comment pourrais-je en pl/sql ou autre, tester le dernier champs (en rouge), parceque je vais récupérer lors de mon select des valeurs de type string <=5 charactères par exemple : (1, 54, 333, 1290, 52a ou encore 216a. Or je souhaiterai d'une part supprimer la dernière lettre et en plus que toutes la valeurs soient sur 4 charactères en mettant un "0" avant le nombre par exemple : (au lieu de 1 avoir 0001, au lieu de 54 avoir 0054, au lieu de 216a avoir 0216).
    Bref je ne sais pas comment je pourrais faire cela en pl/sql, quelqu'un a t'il une piste?
    Merci pour votre aide.

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pour supprimer la dernière lettre :
    si ce n'est qu'un lettre:
    ASCII(SUBSTR(v_chaine, LENGTH(v_chaine))) : vérifier si c'est entre 48 et 57

    pour forcer sur 4 caractères avec des 0 à gauche : LPAD(chaine, 4, '0')
    Attention si chaine est NULL, ça renvoie NULL, donc faire un NVL(chaine, '0')
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Si j'ai bien compris dans tes exemples tu voudrais :
    1, --> 0001
    54 --> 0054
    333 --> 0333
    1290 --> 1290
    52a --> 0052
    216a --> 0216

    C'est ça ?
    Si la dernière lettre est obligatoirement 'a', tu peux t'en sortir avec des decode et substr.

    Ensuite pour ajouter les 0 un LPAD fera l'affaire.

    Avec ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select lpad(decode(substr('52a',-1),'a',substr('52a',1,INSTR('52a','a')-1)),4,'0')
    Il va te renvoyer 0052

    Je te laisse adapter.
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	TABLE_V.E|| _ ||
    trim(to_char(to_number(translate(lower(TABLE_V.F),'abcdefjhijklmnopqrstuvwxyz',' ')),'0000'))
    je remplace les lettres par un espace, j'ajoute les 0 avec le TO_CHAR(col, '0000') et je supprime les espaces

    LPAD c'est mien idiot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trim(lpad(to_number(translate(lower(TABLE_V.F),'abcdefjhijklmnopqrstuvwxyz',' ')),4,'0'))

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est plus simple avec ltrim

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH t AS (SELECT '10' v FROM dual UNION SELECT '20a' FROM dual UNION SELECT 'b' FROM dual)
    SELECT v,SUBSTR(v, 0, NVL(LENGTH(v) - LENGTH(LTRIM(v, '0123456789')), LENGTH(v))) AS valeur
    FROM t
     
    V	VALEUR
    10	10
    20a	20
    b
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut PL/SQL
    Merci pour vos réponses, je vais tester vos solutions, merci encore.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut PL/SQL requete
    Merci pour votre aide à tous et en particulier à orafrance car j'ai utilisé ta sol ca marche nickel

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

Discussions similaires

  1. [SQL] Requete SQL mal formée : mais je vois pas pourquoi !
    Par Thomus38 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/06/2006, 18h03
  2. [SQL] requete sql dans php
    Par 18Marie dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 18/06/2006, 22h45
  3. [sql]Requete sql sans reponse
    Par Le-Cortex dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/05/2006, 16h29
  4. Regroupement par tranche dans une requete SQL (MS SQL)
    Par AODRENN dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/03/2006, 13h21
  5. [SQL] Requete sql avec dates
    Par SergeF dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/03/2006, 16h53

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