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

SQL Oracle Discussion :

créer plusieurs colonnes à partir d'une fonction sys_connect_by_path


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut créer plusieurs colonnes à partir d'une fonction sys_connect_by_path
    Pour l'instant je dois rappeler plusieurs fois la fonction sys_connect_by_path pour séparer ma hiérarchie.
    c'est pas super beau, pas optimisé et un peu trop hardcodé à mon gout, surtout si mes champs peuvent avoir une longueur aléatoire.

    Est-ce qu'il y a une fonction oracle qui pourrais me créer plusieurs colonne en fonction de la longueur de la hiérarchie?

    Autre question:

    Est ce que le fait de ne pas mettre LEVEL dans mes champs posent un problème vu que j'utilise déjà ys_connect_by_path?


    Merci de votre aide

    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
     
    SELECT lev.cpy_lev_n "lev N", 
        trim(substr(sys_connect_by_path(lpad(cpy.cpy_long_nm,50,' '),','),2,50)) L1, 
        trim(substr(sys_connect_by_path(lpad(cpy.cpy_long_nm,50,' '),','),53,50)) L2, 
        trim(substr(sys_connect_by_path(lpad(cpy.cpy_long_nm,50,' '),','),104,50)) L3, 
      LEVEL, 
      lev.cpy_lev_n1 "lev N1", 
      cpy.cpy_long_nm "COMPANY_NAME", 
      roce.exercise, 
      roce.period_dt, 
      roce.oi_mat, 
      roce.roce 
    FROM sck_cpy_level lev, 
      sck_roce roce, 
      sck_ctrl_cpy cpy 
    WHERE roce.cpy_lev = lev.cpy_lev_n 
     AND roce.cpy_lev = cpy.comp_cde START WITH cpy_lev_n = 'N9999' CONNECT BY PRIOR cpy_lev_n = cpy_lev_n1

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut pas d'idée???
    Personne n'a d'idée sur le nom de cette fonction?

  3. #3
    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
    Ce n'est pas possible pour la simple raison que le nb de colonnes serait dynamique en fonction du résultat.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut pas très dynamique tout ça!
    pas très dynamique tout ça!

    Merci quand même, sympa d'avoir répondu.

    Qu'est ce je pourrai faire pour optimisé cette ligne?
    en sachant que le champ cpy.cpy_long_nm et un varchar2(50)

    trim(substr(sys_connect_by_path(lpad(cpy.cpy_long_nm,50,' '),','),2,50)) L1

  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 pas de l'optimisation, mais cela t'affranchit de la taille des champs
    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
    SELECT lev.cpy_lev_n "lev N", 
            SUBSTR(path, 2, INSTR(path, ',',1,2) - 2) AS col1,
            SUBSTR(path, INSTR(path, ',', 1,2)+1, INSTR(path, ',',1,3) - INSTR(path, ',', 1,2) - 1) AS col2,        
            SUBSTR(path, INSTR(path, ',', 1,3)+1, INSTR(path, ',',1,4) - INSTR(path, ',', 1,3) - 1) AS col3    
            LEVEL,
          lev.cpy_lev_n1 "lev N1", 
          cpy.cpy_long_nm "COMPANY_NAME", 
          roce.exercise, 
          roce.period_dt, 
          roce.oi_mat, 
          roce.roce
    FROM (
        SELECT lev.cpy_lev_n, 
                SYS_CONNECT_BY_PATH(LPAD(cpy.cpy_long_nm, ',') ||',' AS path, LEVEL, 
          lev.cpy_lev_n1, 
          cpy.cpy_long_nm, 
          roce.exercise, 
          roce.period_dt, 
          roce.oi_mat, 
          roce.roce 
        FROM sck_cpy_level lev, 
          sck_roce roce, 
          sck_ctrl_cpy cpy 
        WHERE roce.cpy_lev = lev.cpy_lev_n 
         AND roce.cpy_lev = cpy.comp_cde START WITH cpy_lev_n = 'N9999' CONNECT BY PRIOR cpy_lev_n = cpy_lev_n1
     )
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/07/2011, 16h55
  2. [AC-2003] Créer plusieurs graphiques à partir d'une requête
    Par DonKnacki dans le forum IHM
    Réponses: 4
    Dernier message: 23/06/2011, 09h33
  3. Créer une fonction de plusieurs lignes à partir d'une chaine
    Par sopsag dans le forum Général Python
    Réponses: 5
    Dernier message: 21/10/2009, 18h29
  4. Créer plusieures tables à partir d'une seule
    Par CHINAILLON dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/03/2008, 15h35
  5. Créer plusieurs colonnes à partir d’une seule
    Par jeje22 dans le forum Access
    Réponses: 5
    Dernier message: 12/09/2006, 16h31

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