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 :

Initialisation d'un type d'objet


Sujet :

Oracle

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Mai 2004
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 236
    Points : 310
    Points
    310
    Par défaut Initialisation d'un type d'objet
    Bonjour,

    Version, OS : Oracle 8.1.7 sur Windows Xp
    Message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-06530: Référence à un élément composite non initialisé
    Situation : Dans le cadre du développement d'un projet, je suis amené à developper un nombre assez important de procédure oracle. Pour éviter d'avoir des pages de déclaration de variable, j'ai voulu utilisé la création de type d'objet.

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> CREATE OR REPLACE TYPE mvt_type AS OBJECT (ID1 number,CHDET1 varchar2 (25),CHEXPL1 varchar2 (25
    ),NUANIM1 varchar2 (25),DAENTR1 date ,CAENTR1 varchar2 (1),DASORT1 date,CASORT1 varchar2 (1));
      2  /
     
    Type créé.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    SQL> CREATE OR REPLACE PROCEDURE TEST
      2  IS
      3  BEGIN
      4  -- Déclaration des variables
      5    DECLARE
      6    -- Curseur qui sélectionne pour détecter les mutations
      7    TYPE Rcurs_Mut IS REF CURSOR;
      8    curs_Mut Rcurs_Mut ;
      9    
     10    LC$Requete Varchar2 (4000); 
     11    
     12    Mut1 mvt_type;
     13    
     14    BEGIN
     15  
     16    -- Curseur 
     17    
     18    OPEN curs_Mut FOR 'SELECT T1.MVT_ID FROM E_MVT T1'; 
     19     LOOP 
     20            FETCH curs_Mut INTO Mut1.ID1; 
     21           EXIT WHEN curs_Mut%NOTFOUND; -- sortie lorsque le curseur ne ramène plus de ligne  
     22        
     23                 DBMS_OUTPUT.PUT_LINE( 'ID : ' || Mut1.ID1 ) ;
     24  
     25     END LOOP; 
     26    CLOSE curs_Mut;
     27   
     28    COMMIT;
     29    
     30    END;
     31  
     32  END TEST;
     33  /
     
    Procédure créée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> exec TEST;
    BEGIN TEST; END;
     
    *
    ERREUR à la ligne 1 :
    ORA-06530: Référence à un élément composite non initialisé de
    ORA-06512: à "IPGVALO_ADMIN.TEST", ligne 20
    ORA-06512: à ligne 1
    Constation : Dès que je n'utilise pas les types dans le curseur ma procédure marche sans problème.

    Question : D'où vient cette erreur ? Ai-je oublié de déclarer ou de faire quelque chose pour pouvoir utiliser le type que j'ai crée ?

    Merci d'avance de votre aide.

  2. #2
    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
    Pour être utilisable un type doit en effet être au préalable initialisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mut1 := mvt_type (null, null, null, null, null, null, null, null);
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Expert éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Une variable d'un type objet doit être initialisée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Declare
      var_type  mon_type := mon_type(null,null,null,...).
    Begin
       ...
       -- Je peux utiliser ma variable objet
       ...
    End;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Mai 2004
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 236
    Points : 310
    Points
    310
    Par défaut
    Arf je me disais bien aussi qu'il me manquait quelque chose

    Merci beaucoup de votre aide.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/04/2019, 18h52
  2. Réponses: 14
    Dernier message: 24/04/2006, 08h36
  3. Récupérer le type d'objet ayant le focus
    Par pilz dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/02/2006, 14h31
  4. [hibernate] Effacer un type d'objet
    Par nighma dans le forum Hibernate
    Réponses: 10
    Dernier message: 29/12/2005, 10h23
  5. [Appli] Recherche d'un type d'objet précis pour interface
    Par superpatate dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 05/08/2005, 12h02

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