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 :

[SQL] Probême de double curseur...


Sujet :

Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [SQL] Probême de double curseur...
    Bon jvais essayer de bien expliquer... Je ne suis pas très calé en SQL et là jai un truc au boulot ca m'a lair bien complexe...

    En fait faut que je créée une procédure avec en parametre le nom de la table ORACLE sur laquelle je vais bosser ( premier problême, il parait que ca ne marche pas ça... )

    Ensuite il faut que je trouve un moyen de recuperer tte les infos de cette table et les ecrire dans un fichier...

    Donc apparement il faut un double curseur :
    * 1 qui recupère les données dans la table => cur_donnée
    * 1 qui recupère les noms des colones de la table ( puisque ca sera pas les meme suivant la table entrée en parametre ) => cur_colonne

    Puis ensuite je fait une boucle LOOP qui va ballayer les données de la table avec le premier curseur
    FOR cur IN cur_donnée LOOP

    Puis apres pour ecrire les données jai besoin de concatener ainsi
    cur.NOM_COLONNE1||';'||cur.NOM_COLONNE2||';'||cur.NOM_COLONNE3||etc...
    Or NOM_COLONNE1, NOM_COLONNE2, et NOM_COLONNE3 je les ramene avec le deuxième curseur pour ne pas les ecrire en dur puisque ce ne sont jamais les memes suivant la table sur laquelle je travaille...

    Bref jsuis paumé parcque ça, je ne sais pas faire...

    Je suis assez clair ?
    Peut etre y a til une autre méthode...
    Merci d'avance

  2. #2
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Bienvenu sur le forum plomy.

    Il serait recommandé que tu lises les règles du forum afin de t'aider à nous aider à t'aider!

    Entre autre... on ne connait pas ton SGBD et
    l'utilisation des balises et d'un bon français améliore la compréhension.

    Merci de nous aider à t'aider!

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour l'acceuil

    Désolé pour le français, j'ai édité pour que cela passe mieux...
    Quant aux balises je regarde ca de suite !

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ce que tu veux faire est apparemment du SQL dynamique : fais des recherches avancées sur le forum oracle concernant l'instruction :Tu peux utiliser la table ALL_TAB_COLUMNS pour récupérer les données que tu recherches.
    Enfin s'il te restes d'autres questions propres à Oracle sache qu'il existe un forum dédié (dans lequel tu n'oublieras pas d'indiquer ta version si jamais tu postes un message)

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Voici ce que j'ai fait jusqu'a maintenant

    DECLARE

    CURSOR cur_val IS SELECT * FROM MA_TABLE;

    BEGIN

    FOR rec IN cur_val LOOP


    DBMS_OUTPUT.PUT_LINE( rec.GEN_SUP_DOSSIER||';'||rec.GEN_SUP_ID||';'|| rec.GEN_SUP_NOM||';'||rec.GEN_SUP_TYPE||';'||rec.GEN_SUP_CODE_BOURSE );

    END LOOP;

    END;
    Le pb c'est que par la suite , suivant MA_TABLE je ne dois plus mettre en dur le nom des colonnes dans mon DBMS_OUTPUT. mais trouver un moyen de les ramener automatiquement...

    Et la c'est vraiment compliqué pour moi qui n'ai jamais fait vraiment de SQL

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ah c'est sûr si tu n'as jamais fait de SQL tu vas découvrir un tas de concepts.

    Néanmoins, voilà ce que je peux te proposer : j'ai écrit une procédure qui me fournit la liste des colonnes d'une table dont le nom est passé en paramètre.
    Ce traitement est relativement similaire donc tu peux t'en inspirer, au moins au niveau des structures de données utilisées :
    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
    CREATE OR REPLACE FUNCTION col (PCname_table VARCHAR2, PCowner VARCHAR2) RETURN VARCHAR2 IS
      LClist_columns VARCHAR2(1000);
      LCcolumn_fetched VARCHAR2(50);
      CURSOR LCuTable IS
      SELECT COLUMN_NAME
      FROM SYS.ALL_TAB_COLUMNS
      WHERE UPPER(OWNER) = UPPER(PCowner)
      AND UPPER(TABLE_NAME) = UPPER(PCname_table)
      ORDER BY COLUMN_ID;
    BEGIN
      LClist_columns := '';
      OPEN LCuTable;
        LOOP
          FETCH LCuTable INTO LCcolumn_fetched;
          EXIT WHEN LCuTable%NOTFOUND;
          LClist_columns := LClist_columns || LCcolumn_fetched || ', ';
          IF MOD( LENGTH(LClist_columns), 50 ) = 0 THEN
            LClist_columns := LClist_columns || CHR(10);
          END IF;
        END LOOP;
        LClist_columns := '(' || SUBSTR( LClist_columns, 1, LENGTH(LClist_columns) - 2 ) || ')';
      CLOSE LCuTable;
      RETURN LClist_columns;
    END;
    Quelques questions qui vont nous permettre de t'aider plus rapidement :
    - utilises-tu SQLPlus ?
    - connais les commandes DESCRIBE ? Certaines tables systèmes ?
    - Sais-tu déclarer une fonction ? Invoquer une fonction ?

    Si tu n'obtiens pas de réponse rapidement à tes questions, demande à un modérateur de déplacer ton message dans le forum Oracle.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Magnus
    Néanmoins, voilà ce que je peux te proposer : j'ai écrit une procédure qui me fournit la liste des colonnes d'une table dont le nom est passé en paramètre.
    Ok...
    Voici ce que moi j'utilise... C'est different ?

    CURSOR cur_table IS SELECT column_name FROM user_tab_columns WHERE table_name= 'MA_TABLE';
    Puis avec une boucle je recupère les noms de colonnes...

  8. #8
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Non cela revient au même :
    - user_tab_columns : toutes les colonnes des tables de ton user oracle
    - all_tab_columns toutes les colonnes de toutes les tables, mais comme Magnus fait une restriction sur le user, le résultat est le même...

Discussions similaires

  1. Réponses: 10
    Dernier message: 04/10/2007, 14h17
  2. ADO, MS SQL Server, TADOTable, TADOQuery, curseurs et perfomances
    Par okparanoid dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/05/2006, 11h52
  3. PL/SQL, problème dans un curseur avec un insert
    Par yador dans le forum PL/SQL
    Réponses: 4
    Dernier message: 27/01/2006, 14h31
  4. [PL/SQL] Traitement d'un curseur dans une fonction
    Par ruda.tom dans le forum Oracle
    Réponses: 1
    Dernier message: 24/10/2005, 22h06
  5. [PL/SQL] Procédure renvoyant un curseur.
    Par KalHadj-Nikov dans le forum Oracle
    Réponses: 3
    Dernier message: 17/12/2004, 15h10

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