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 :

Utilisation de la fonction CURSOR


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Par défaut Utilisation de la fonction CURSOR
    Bonjour,

    J'ai besoin de lister l'ensemble des colonnes de l'ensemble des tables dont j'ai accès dans une BDD sous oracle.

    j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DECLARE
    CURSOR cur IS
    	SELECT table_name FROM all_tables
            where table_name like ('TF_%') 
            OR table_name like ('TD_%') 
            or table_name like ('TN_%') 
            or table_name like ('TU_%')
            or table_name like ('VN_%');
    	BEGIN
    	FOR rec IN cur loop
    Select COLUMN_NAME from ??? ;
    	END LOOP;
    END;
    le soucis est que la sortie de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT table_name FROM all_tables
            where table_name like ('TF_%') 
            OR table_name like ('TD_%') 
            or table_name like ('TN_%') 
            or table_name like ('TU_%')
            or table_name like ('VN_%');
    me donne le nom des tables sans le nom du modèle (ex : TF_TBLACP_J pour la table DWH.TBLACP_J)

    Donc je ne sais comment faire dans cette partie de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BEGIN
    	FOR rec IN cur loop
    Select COLUMN_NAME from ??? ;
    	END LOOP;
    END;
    quelqu'un aurait-il une idée ?

    Merci d'avance.

  2. #2
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Pour avoir le nom complet de la table il suffit de préfixer TABLE_NAME par OWNER non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select owner||'.'||table_name from all_tables
    Et pour lister les colonnes des tables, tu disposes de la table : ALL_TAB_COLUMNS

  3. #3
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Et au passage :

    Ton SQL pour sélectionner tes tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT table_name FROM all_tables
            WHERE table_name LIKE ('TF_%') 
            OR table_name LIKE ('TD_%') 
            OR table_name LIKE ('TN_%') 
            OR table_name LIKE ('TU_%')
            OR table_name LIKE ('VN_%');
    Pourrait être simplifié en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT table_name FROM all_tables
            WHERE SUBSTR(table_name,0,3) IN ('TF_','TD_','TN_','TU_','VN_')

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Pas vraiment, le _ est un symbole spécial pour le like qui correspond à "N'importe quel caractère"
    Pour être juste faudrait remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE SUBSTR(table_name,0,2) IN ('TF','TD','TN','TU','VN') AND length(table_name) > 2
    Sinon pour répondre à Ueshiba : Pour passer des noms de table en variable, il faut utiliser du dynamique. Dans ton cas, il faudrait utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open cur for 'SELECT .. FROM '|| r.table_name
    , mais ce n'est pas ce que tu veux.

    Plus simple pour toi : utiliser la vue all_tab_columns, que tu peux selecter directement.

  5. #5
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Citation Envoyé par McM Voir le message
    Pas vraiment, le _ est un symbole spécial pour le like qui correspond à "N'importe quel caractère"
    C'est un symbole spécial pour le LIKE mais pas pour le IN j'ai l'impression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT * FROM
      (
       SELECT 'TA_TEST' AS VAL FROM DUAL
       UNION
       SELECT 'FA_TEST' AS VAL FROM DUAL
       UNION
       SELECT 'TAG_TEST' AS VAL FROM DUAL
       UNION
       SELECT 'T_TEST' AS VAL FROM DUAL
       )
    WHERE SUBSTR(VAL,0,3) IN ('TA_','FA_')
    Si le '_' était un caractère spécial , j'aurais en retour la valeur TAG_TEST mais j'ai uniquement :


    Edit : Autant pour moi , j'ai pas compris de quoi tu parlais mais oui lui il veut bien les noms de tables qui commencent par 2 caractères précis et ont une longueur d'au moins 3 , donc ma requête est fausse

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Par défaut
    Bonjour et merci pour vos réponses.

    Bon, en effet, j'ai fait bien trop compliqué

    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 a.owner||'.'||a.table_name||'.'||a.COLUMN_NAME as CHAMPS,
           b.COMMENTS as DESCRIPTIF,
           a.DATA_TYPE as FORMAT,
           a.DATA_LENGTH as LONGUEUR
     
           FROM ALL_TAB_COLUMNS a,
                ALL_COL_COMMENTS b
     
            WHERE a.table_name LIKE ('TF_%') 
            OR a.table_name LIKE ('TD_%') 
            OR a.table_name LIKE ('TN_%') 
            OR a.table_name LIKE ('TU_%')
            OR a.table_name LIKE ('VN_%')
            and a.COLUMN_NAME=b.COLUMN_NAME
     
    ORDER BY CHAMPS ASC
    est beaucoup plus simple....

    A ma décharge, je suis simple utilisateur mais n'empêche je faisais trop compliqué.

    Sujet clôturé.

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

Discussions similaires

  1. [LG]Utilisation de la fonction time
    Par kmitz dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2005, 13h05
  2. Utilisation de la fonction de déploiement
    Par mchicoix dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/03/2005, 14h35
  3. [LG]Utilisation de la fonction Random
    Par chloe95 dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2005, 14h20
  4. Utilisation de la fonction qsort
    Par Jsmeline dans le forum C
    Réponses: 8
    Dernier message: 28/01/2005, 12h40
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

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