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 :

Collection : Table imbriqué existe physique des données?


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut Collection : Table imbriqué existe physique des données?
    Bonjour,

    Voila après 70 pages de lecture d'un chapitre sur les colections et enregistrement. Je me dis que cela va etre encore plus sympa de faire du pl/sql

    Voila, je viens de finir un dev ou j'ai stocké via des tables imbriqués, des valeurs.

    Et je me pose la question de ces valeurs sont-elles stockées "en dur" au meme titre que les données qu'il y a dans une table "normal" ou bien

    Oui, en effet j'avais tendance à penser que cela fonctionnait comme dans objet dans n'importe qu'elle language objet, et que cela n'était donc pas sérializé.

    Mais maintenant, je sais plus trop quoi penser.

    Si quelqu'un peu me répondre, cela serait bien pour ma tranquilité.

    Merci

  2. #2
    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
    Bien sûr que ces données sont stockées en dur. comment voulez-vous qu'elles le soient ? (nous parlons bien de tables Oracle)

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    Je parle de type que je créer de la manière suivantes :

    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
     
    create or replace type T_REF_USER_CLIENT as object
    (
          numcli           varchar2(255)
        , numaff           varchar2(255)
        , codact           varchar2(255)
        , codbnf           varchar2(255)
        , refexterne       varchar2(255)
        , coddouane        varchar2(255)
        , numsin           varchar2(255)
        , numsintexo       varchar2(255)
        , numctr           varchar2(255)
        , dosgst           varchar2(255)
        , nomuti           varchar2(255)
        , teluti           varchar2(255)
        , nomgst           varchar2(255)
        , telgst           varchar2(255)
    )
     
    create or replace type TT_REF_USER_CLIENT is table of T_REF_USER_CLIENT
    Et lorsque je crée un nouvel objet TT_REF_USER_CLIENT, je me demande si cet objet est persitant. C'est à dire s'il existe après que ma fonction soit terminés. Ce qui est très dérangeant dans mon utilisation car mon object va etre appelé une centaines de fois par jour....

    Tu comprends mieux ma question?

    Merci

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    create type mon_type ordre SQL création de la définition de l'objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare
     
    type mon_type_pl table of number...
    ordre PL/SQL recréé à chaque exécution du code


    c'est ça que tu voulais savoir ?

  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
    Un type PL/SQL n'est pas persistent. Il réside en mémoire le temps de son utilisation.
    Les données contenues ne deviennent persistentes que lorsqu'elles sont enregistrées en base (dans une table)

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Tu peux lire le paragraphe "Persistent Objects, Transient Objects, and Values", Oracle Call Interface, Programmer’s Guide (A96584.pdf ,page 10-5 )

    Citation Envoyé par SheikYerbouti
    Un type PL/SQL n'est pas persistent.
    Tu parles bien d'un type objet ou d'un objet d'un type particulier ?

    j'avais cru comprendre ceci
    Type persistant ( Persistent types )
    Ceux-ci sont créés en utilisant l’instruction SQL CREATE TYPE. Ils sont persistant, c’est dire stockés dans la base de données.
    La doc Oracle utilisant aussi le terme de Transient type au moins pour le type AnyType et fait bien le distinguo entre Type et Objet.

    SYS.ANYTYPE
    A type description type. A SYS.ANYTYPE can contain a
    type description of any SQL type, named or unnamed,
    including object types and collection types.

    An ANYTYPE can contain a type description of a persistent
    type, but an ANYTYPE itself is transient: in other words,
    the value in an ANYTYPE itself is not automatically stored
    in the database. To create a persistent type, use a CREATE
    TYPE statement from SQL.
    Application Developer's Guide - Object-Relational Features (A96594.pdf, page 6-37 )

  7. #7
    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
    Citation Envoyé par Laurent Dardenne
    Tu peux lire le paragraphe "Persistent Objects, Transient Objects, and Values", Oracle Call Interface, Programmer’s Guide (A96584.pdf ,page 10-5 )

    Citation Envoyé par SheikYerbouti
    Un type PL/SQL n'est pas persistent.
    Tu parles bien d'un type objet ou d'un objet d'un type particulier ?

    j'avais cru comprendre ceci
    Type persistant ( Persistent types )
    Ceux-ci sont créés en utilisant l’instruction SQL CREATE TYPE. Ils sont persistant, c’est dire stockés dans la base de données.
    La doc Oracle utilisant aussi le terme de Transient type au moins pour le type AnyType et fait bien le distinguo entre Type et Objet.
    c'est bien la raison pour laquelle je parle de type PL/SQL par opposition au type SQL (CREATE TYPE) qui lui est persistent.

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    coucou ,

    Désolé de pas etre revenu plus tot un probleme de production.

    Mes "type" sont bien créer dans la base via un " CREATE TYPE .. As OBJECT".

    Et cela ne me dérange pas qu'il sont persitant dans la base, par contre je me pose la question de savoir si les données que je stocke dans le type via une fonction.

    Exemple :
    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
     
          -----------------------------------------------------------------
          function FO_DATE_SIGNATAIRE return TT_DATE_SIGNATAIRE
          -----------------------------------------------------------------
          is
            retval TT_DATE_SIGNATAIRE := TT_DATE_SIGNATAIRE();
     
            cursor cur_courrier is select * 
                                   from op.vi_date_signataire;
     
     
          begin
     
              for rec in cur_courrier 
              loop 
                 retval.extend;
                 retval (retval.last) := T_DATE_SIGNATAIRE( rec.datcou          
                                                          , rec.indpstpdg
                                                          , rec.indsexsigna        
                                                          , rec.titresigna           
                                                          , rec.nomsigna) ;
              end loop; 
     
              return(retval);
     
          end FO_DATE_SIGNATAIRE;
    Ce code est tiré d'un package, et je fais après un appel à cette fonction dans le du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     select *
          from   table ( cast (op.pa_courrier_construction.FO_DATE_SIGNATAIRE) as op.TT_DATE_SIGNATAIRE)
    dans du sql, et je me demande si les données que j'ai enregistré dans le type TT_DATE_SIGNATAIRE vont etre persistantes ou si elle vont etre supprimer par oracle via un style de garbage collector, ou autre.


    En fait je ne veux pas que mes données persites dans la base.

    J'espere avoir été plus clair sur ma question.

    MErci

  9. #9
    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
    Rien ne persistera tant que vous n'aurez rien enregistré dans votre base
    (INSERT, UPDATE, DELETE)

    est-ce bien clair ?

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    Oui ok merci,
    mais par contre ce que j'ai du mal à comprendre, c'est ou sont les données surement en mémoire .

    Mais par contre comment c'est t-il qu'il faut les supprimer et pourquoi?

  11. #11
    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
    Citation Envoyé par superfly
    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
     
          -----------------------------------------------------------------
          function FO_DATE_SIGNATAIRE return TT_DATE_SIGNATAIRE
          -----------------------------------------------------------------
          is
            retval TT_DATE_SIGNATAIRE := TT_DATE_SIGNATAIRE();
     
            cursor cur_courrier is select * 
                                   from op.vi_date_signataire;
     
     
          begin
     
              for rec in cur_courrier 
              loop 
                 retval.extend;
                 retval (retval.last) := T_DATE_SIGNATAIRE( rec.datcou          
                                                          , rec.indpstpdg
                                                          , rec.indsexsigna        
                                                          , rec.titresigna           
                                                          , rec.nomsigna) ;
              end loop; 
     
              return(retval);
     
          end FO_DATE_SIGNATAIRE;
    Ce code est tiré d'un package, et je fais après un appel à cette fonction dans le du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     select *
          from   table ( cast (op.pa_courrier_construction.FO_DATE_SIGNATAIRE) as op.TT_DATE_SIGNATAIRE)
    Vous voyez bien que vos données sont extraites de la table vi_date_signataire.

  12. #12
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    oui, mais elle sont chargées dans le type TT_DATE_SIGNATAIRE, mais ne persite pas?

    Mais le type, il est bien en base et les données renseignées dedans sont bien dans une allocation mémoire ou juste un pointeur vers des lignes d'une table?

    Je sais que j'ai l'air un peu dure d'oreille

  13. #13
    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
    Effectivamant, les données lues depuis la table existent en mémoire de temps d'ouverture du curseur.

  14. #14
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    un type c'est ni plus ni moins qu'une variable. Donc c'est en mémoire le temps que la connection est ouverte

  15. #15
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    En mémoire le temps de la connexion, ce qui veut dire que sur un soft ou la connexion est ouverte à l'entrée dedans avec login et pass et fermer à la fermeture du soft la variable serait persitant tout au l'on de la session.

    Je parle d'un soft VB qui s'interfacerait avec oracle, ou dans le code vb j'aurais le "select" de tout à l'heure qui remplirait un recordset ouvert avant le "select" et fermer après.

    Moi j'aurais tendance à dire que la varible n'existe qu'entre l'ouverture du recordset et sa femeture? Vous en pensez quoi?

    Merci

  16. #16
    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
    Non, je pense que dans votre exemple, les données ne retent présentes en mémoire que le temps d'ouverture du curseur.

  17. #17
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    j'en pense que je sais pas ce qu'est un record set

    En fait, j'ai été un peu vite

    Si la variable est dans un ordre PL/SQL alors elle sera détruite avec le END du code... si c'est du SQL alors c'est à la fermeture de session

  18. #18
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    Oh le boulet désolé les gars mais j'étais pas réveillé.

    Bon je viens de relire le post en entier, et je me suis rendu compte que j'étais pas doué doué.

    c'est maintenant évident que la variable est désaloué après le end de la fonction.

    Merci encore de m'avoir ouvert les yeux.

    A demain, pour de nouvelle aventure

  19. #19
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par superfly
    A demain, pour de nouvelle aventure
    tu voudrais pas nous laisser quelques jours de répis ?

    je plaisante bien sûr

  20. #20
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    T'inquietes il n'y aura pas de nouvelle aventure avant lundi...
    Au moins j'arrete le R&D pour retourner en production...

    Un vaste programme

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/04/2008, 14h20
  2. [Tables]Stocker et supprimer des données
    Par Melhiril dans le forum Access
    Réponses: 3
    Dernier message: 14/05/2007, 09h45
  3. Réponses: 5
    Dernier message: 16/06/2006, 22h39
  4. [SQL] - Table 1 fournit colone des donnes de table 2
    Par COlive dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/11/2005, 03h08

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