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 :

(Oracle 10g - PL/SQL) Accès dynamique à un %ROWTYPE


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 6
    Par défaut (Oracle 10g - PL/SQL) Accès dynamique à un %ROWTYPE
    Bonjour,

    Je veux écrire une procédure PL/SQL dans laquelle j'accède à des champs d'un rowtype passé en paramètre de manière dynamique (les noms des champs sont issus d'une table).

    Le code ressemble à celui ci :

    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
    PROCEDURE "COMPARE_CHAMPS"
    (
     p_anciennes_valeurs IN MATABLE%ROWTYPE,
     p_nouvelles_valeurs IN MATABLE%ROWTYPE
    ) IS
      ancienneVal VARCHAR(250);
      nouvelleVal VARCHAR(250);
    BEGIN
        FOR maligne in (SELECT * FROM MATABLE_COLONNES) LOOP
          -- Pour chaque colonne à surveiller, on regarde si la valeur a changée.
         EXECUTE IMMEDIATE 'SELECT p_ancien_trade.'||TMCRow.TMC_NOM||' FROM DUAL' INTO ancienneVal;
         EXECUTE IMMEDIATE 'SELECT p_nouveau_trade.'||TMCRow.TMC_NOM||' FROM DUAL' INTO nouvelleVal;
    
          IF ancienneVal<>nouvelleVal THEN
           -- La valeur a changé, on insère la modif.
          END IF;
        END LOOP;	 
    END COMPARE_TRADES;
    Le problème est qu'en SQL dynamique, les variables ROWTYPE ne sont pas connues, il faut donc que je trouve un moyen d'accéder aux différents champs du rowtype sans connaitre leur nom à priori...

    Quelqu'un a t il une idée?

    D'avance merci

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Par défaut
    Bonjour,

    Peut être qu'un curseur sur les colonnes de ta table pourrais être utilisé...
    Il suffirait ensuite de boucler sur ces colonnes pour la comparaison.

    C'est peut être une piste
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 6
    Par défaut
    Merci pour ta réponse, mais je ne comprends pas bien :
    à chaque boucle, je connais le nom de la colonne à laquelle je veux accéder, le problème est que je ne sais pas comment y accéder... La structure des données est un rowtype, et en SQL dynamique, j'ai l'impression qu'on ne peut accéder qu'à des objets en base.
    Je cherche donc à savoir s'il existe une syntaxe (en SQL dynamique ou non) qui permette d'accéder aux colonnes autrement qu'en les nommant explicitement...

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Je ne vois que le package DBMS_SQL qui permet d'accéder par position à une colonne résultat d'une requête; voir l'exemple n° 3 dans http://download-uk.oracle.com/docs/c...htm#sthref7418

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Vous pouvez également vous inspirer de la deuxième partie de l'article suivant:
    http://sheikyerbouti.developpez.com/dynamic/dynamic.htm

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 6
    Par défaut
    Merci, mais dans les 2 solutions, la source doit être une table et pas un ROWTYPE, non ?
    Quelque chose m'echappe, j'ai beau regarder tous les exemples, je n'arrive pas à les ramener au cas qui me préoccupe..

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/11/2008, 11h54
  2. [Oracle 10g & MS SQL Server 2K5] DTS Import/Export Wizard
    Par tamiii dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 11/04/2008, 09h08
  3. Installation oracle 10g: gestion des acces disques
    Par dobinator dans le forum Oracle
    Réponses: 7
    Dernier message: 10/05/2007, 20h08
  4. Réponses: 2
    Dernier message: 14/02/2007, 16h22
  5. Réponses: 1
    Dernier message: 17/03/2006, 07h21

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