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

SQL Oracle Discussion :

[10r1] Collection Type : erreur 'Reference to uninitialized composite'


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Par défaut [10r1] Collection Type : erreur 'Reference to uninitialized composite'
    Bonjour,
    j'ai un objet type et une collection de ce type
    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
     
    CREATE OR REPLACE
    TYPE RemisLifa IS OBJECT (
    	sType INTEGER,
    	idG INTEGER,
    	versG INTEGER,
    	iBaseA VARCHAR2(10),
    	iAchat NUMBER,
    	iUtilA CHAR(1),
    	iBaseV VARCHAR2(10),
    	iVente NUMBER
    );
     
    CREATE OR REPLACE
    TYPE RemisLifaTab IS TABLE OF RemisLifa;
    jusque la tout va bien, j'arrive a les utiliser dans mon code plsql et tout compil e bien. mais quand je veux executer le tout j'ai une erreur ORA-06530: Reference to uninitialized composite à la ligne en rouge

    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
    PROCEDURE INIT_TAB_REMIS_ID(sGrille_Id IN NUMBER, sGrille_Version IN NUMBER,sFabr IN VARCHAR2,MyRemisLifaTab OUT RemisLifaTab,MyRemisNisgTab OUT RemisNisgTab,MyRemisNigaTab OUT RemisNigaTab,bTrouvfabr OUT BOOLEAN) IS
    sBaseA LIFA.LIFA_BASEA%TYPE;
    sAchat LIFA.LIFA_ACHAT%TYPE;
    sUtilA LIFA.LIFA_UTILA%TYPE;
    sBaseV LIFA.LIFA_BASEV%TYPE;
    sVente LIFA.LIFA_VENTE%TYPE;
    BEGIN
    	MyRemisLifaTab := RemisLifaTab();
    	MyRemisNisgTab := RemisNisgTab();
    	MyRemisNigaTab := RemisNigaTab();
    	MyRemisLifaTab.extend;
    	MyRemisNisgTab.extend;
    	MyRemisNigaTab.extend;
    	
       	BEGIN
    		SELECT LIFA_BASEA,LIFA_ACHAT,LIFA_UTILA,LIFA_BASEV,LIFA_VENTE 
    		INTO sBaseA,sAchat,sUtilA,sBaseV,sVente
    		FROM LIFA
    		WHERE LIFA_GRIL_ID = sGrille_Id AND LIFA_GRIV_VERSION = sGrille_Version
    		AND LIFA_FABR_LIDIC = sFabr;
    
    		MyRemisLifaTab(MyRemisLifaTab.COUNT).idG   := sGrille_Id;
       		MyRemisLifaTab(MyRemisLifaTab.COUNT).versG := sGrille_Version;
       		MyRemisLifaTab(MyRemisLifaTab.COUNT).sType := 0;
    		MyRemisLifaTab(MyRemisLifaTab.COUNT).iBaseA := sBaseA;
    		MyRemisLifaTab(MyRemisLifaTab.COUNT).iAchat := sAchat;
    		MyRemisLifaTab(MyRemisLifaTab.COUNT).iUtilA := sUtilA;
    		MyRemisLifaTab(MyRemisLifaTab.COUNT).iBaseV := sBaseV;
    		MyRemisLifaTab(MyRemisLifaTab.COUNT).iVente := sVente;
    		bTrouvfabr := TRUE;
    je précise que
    sGrille_Id est non null
    sGrille_Version est non null
    sBaseV est non null
    les autres variables le sont.

    Si qq1 à une idée,...

  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
    Bonjour,

    Vous devez également initialiser les objets contenus dans la collection:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    MyRemisLifaTab := RemisLifaTab();
    Loop
       MyRemisLifaTab.extend;
       MyRemisLifaTab(MyRemisLifaTab.COUNT) := NEW RemisLifa(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) ;
    End loop ;
    ...

  3. #3
    Membre confirmé Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Par défaut
    Merci,
    je pensais pas qu'il fallait aussi initialiser le type objet.
    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
     
    PROCEDURE INIT_TAB_REMIS_ID(sGrille_Id IN NUMBER, sGrille_Version IN NUMBER,sFabr IN VARCHAR2,MyRemisLifaTab OUT RemisLifaTab,MyRemisNisgTab OUT RemisNisgTab,MyRemisNigaTab OUT RemisNigaTab,bTrouvfabr OUT BOOLEAN) IS
    sBaseA LIFA.LIFA_BASEA%TYPE;
    sAchat LIFA.LIFA_ACHAT%TYPE;
    sUtilA LIFA.LIFA_UTILA%TYPE;
    sBaseV LIFA.LIFA_BASEV%TYPE;
    sVente LIFA.LIFA_VENTE%TYPE;
    BEGIN
    	MyRemisLifaTab := RemisLifaTab();
    	MyRemisNisgTab := RemisNisgTab();
    	MyRemisNigaTab := RemisNigaTab();
    	MyRemisLifaTab.extend;
    	MyRemisNisgTab.extend;
    	MyRemisNigaTab.extend;
     
       	BEGIN
    		SELECT LIFA_BASEA,LIFA_ACHAT,LIFA_UTILA,LIFA_BASEV,LIFA_VENTE 
    		INTO sBaseA,sAchat,sUtilA,sBaseV,sVente
    		FROM LIFA
    		WHERE LIFA_GRIL_ID = sGrille_Id AND LIFA_GRIV_VERSION = sGrille_Version
    		AND LIFA_FABR_LIDIC = sFabr;
    		MyRemisLifaTab(MyRemisLifaTab.COUNT) := NEW RemisLifa(0,sGrille_Id,sGrille_Version,sBaseA,sAchat,sUtilA,sBaseV,sVente) ;
    		bTrouvfabr := TRUE;
    	EXCEPTION WHEN NO_DATA_FOUND THEN
    	 	bTrouvfabr := FALSE;
    	END;
    	IF bTrouvfabr THEN
    		EXECUTE IMMEDIATE ' SELECT 0,'||sGrille_Id||','||sGrille_Version||',NIGA_GAMM_CODE,NIGA_BASEA,NIGA_ACHAT,NIGA_UTILA,NIGA_BASEV,NIGA_VENTE '||
    	 	  ' FROM NIGA'||
    		  ' WHERE NIGA_FABR_LIDIC = '''||sFabr||''''|| 
    		  ' AND NIGA_GRIL_ID = '||sGrille_Id|| 
    		  ' AND NIGA_GRIV_VERSION = '||sGrille_Version BULK COLLECT INTO MyRemisNigaTab;
    je pense que je dois avoir maintenant le même pb avec 'EXECUTE IMMEDIATE'. Existe-t-il une facon simple de le faire en gardant cette synthaxe ou dois-je obligatoirement faire une boucle?

  4. #4
    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
    S'il y a concordance entre le types de chaque composant de l'objet avec le type des colonnes ramenées par le Select, cela devrait fonctionner.

    Au début, faites un test sur un petit objet de 2 colonnes par example.

  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
    Sinon, la bonne vieille boucle

    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
     
    CREATE OR REPLACE TYPE typ_dept AS OBJECT(
    DEPT NUMBER(2),
    dname VARCHAR2(30),
    loc VARCHAR2(30))
    /
    CREATE OR REPLACE TYPE typ_tab_dept IS TABLE OF typ_dept
    /
    DECLARE
      tableau typ_tab_dept := typ_tab_dept() ;
      CURSOR cc IS SELECT deptno, dname, loc FROM DEPT ;
    BEGIN
      FOR c IN cc LOOP
        EXIT WHEN cc%NOTFOUND ;
        tableau.extend ;
        tableau(tableau.COUNT) := NEW typ_dept(c.deptno, c.dname, c.loc) ;
      END LOOP ;
    END ;

  6. #6
    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
    Ou alors, la table pl/sql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DECLARE
      TYPE typ_dept IS RECORD(
        DEPT NUMBER(2),
        dname VARCHAR2(30),
        loc VARCHAR2(30)) ;
      TYPE typ_tab_dept IS TABLE OF typ_dept INDEX BY BINARY_INTEGER ;
      tableau typ_tab_dept ;
      CURSOR cc IS SELECT deptno, dname, loc FROM DEPT ;
    BEGIN
      OPEN cc ;
      FETCH cc BULK COLLECT INTO tableau ;
      CLOSE cc ;
    END ;

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

Discussions similaires

  1. Erreur de type undefined reference to `_imp_*'
    Par Agoudard dans le forum C++
    Réponses: 3
    Dernier message: 20/09/2012, 10h54
  2. Réponses: 6
    Dernier message: 12/05/2008, 14h56
  3. Réponses: 2
    Dernier message: 27/03/2008, 16h57
  4. Réponses: 4
    Dernier message: 30/05/2006, 19h39
  5. Treeview : Erreur "Reference to variable or parameter..
    Par Tirlibibi dans le forum XMLRAD
    Réponses: 4
    Dernier message: 06/05/2003, 11h19

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