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 :

Récupérer dynamiquement les propriétés d'un objet (et non pas d'une table) [10g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut Récupérer dynamiquement les propriétés d'un objet (et non pas d'une table)
    Bonjour

    Je souhaite, en fonction de certains critères qui importent peu ici, n'afficher que certains champs d'un objet typé reçu en paramètre. Avec une table ce serait facile à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      lc_req := 'Select ' || lc_variable_contenant_le_nom_du_champ || ' From ma_table ';
      execute immediate lc_req into lc_valeur;
      dbms_output(lc_valeur);
    mais ceci ne passe pas avec un objet de type Record reçu en mémoire. Comment pourrais-je y arriver ?

    Merci

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Il y a deux (trois en fait) moteurs dans la base Oracle: un moteur SQL et un autre en PL/SQL. Le type Record n'existe que en PL/SQL et ne peut pas être utilisé par le moteur SQL. Par contre le type Objet stocké dans la base (create type ... As Object) est accessible partout.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut
    Bonjour et merci pour votre réponse.

    J'ai donné un exemple simple en SQL pour le cas d'une table, mais peu importe que ce soit SQL ou PL/SQL, mon but est de retrouver dynamiquement une proprité d'un objet PL/SQL dont le nom est dans une variable. Est ce possible?

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Tel que vous la posez: probablement que non. Mais regarder aussi dans quel mesure cet article "anydata and anytype in 9i" réponde à votre besoin.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut
    Merci pour le lien.
    Je ne connaissais pas les ANYDATA, mais même sans les utiliser le lien montre un exemple avec la solution : il suffit de faire un execute immediate d'un code PL/SQL et non pas SQL (je ne savais pas que c'était possible).
    Voici l'exemple du lien en question, à adapter bien sur, en mettant dans la chaine à exécuter le nom de la propriété voulue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    EXECUTE IMMEDIATE 
    'DECLARE
           v_object ' || v_typename || ';
           v_anydata     ANYDATA := :bv1_in;
           v_dummy       PLS_INTEGER;
    BEGIN
           v_dummy := v_anydata.GetObject(v_object);
          :bv2_out := v_object.print();
    END;'
    USING  IN  p_anydata, OUT v_value;

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Je ne pense pas que cette solution fonctionne avec un type Record pour la raison indiquée dans ma première intervention.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut
    Je ne vois pas où est le problème ? On execute du pl/sql et on passe le objet typé en paramètre , il sera donc reconnu ...

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Loko Voir le message
    Je ne vois pas où est le problème ? On execute du pl/sql et on passe le objet typé en paramètre , il sera donc reconnu ...
    Avez vous testé avec un type PL/SQL Record ?

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/01/2009, 11h57
  2. [Type "var"] Comment récupérer les propriétés de l'objet ?
    Par Firedeal dans le forum Framework .NET
    Réponses: 7
    Dernier message: 31/07/2008, 22h57
  3. Lister les propriétés d'un objet
    Par DWade dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/10/2006, 12h09
  4. [Zope] Changer les propriétés d'un objet
    Par senacle dans le forum Zope
    Réponses: 1
    Dernier message: 27/09/2006, 11h32
  5. Réponses: 1
    Dernier message: 20/02/2006, 10h59

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