Bonjour,

j'ai un probleme assez spécial lors d'un ajout dans une collection varray, evidemment je me trouve ds un contexte Objet-Relationnel sous Oracle 10g.

le probleme etant que si j'ajoute dans mon exemple un auteur a un memoire, (le memoire etant stocke ds une table Objet-Rel et le(s) auteur(s) dans un varray) a l interieur d une procedure pl/sql, Oracle me renvoie l'erreur ORA-22908: reference a une valeur de table NULL.

par contre si j ajoute d'abord le memoire ds la procedure pl/sql, et que par la suite j ajoute a la 'dur' son auteur avec la MEME requete d'insertion ca marche.

Merci de m'éclairer.

Voici le code de la procedure pl/sql qui ajoute le memoire et logiquement qui devrait ajouter son auteur :

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
37
38
39
40
41
42
43
44
45
46
47
48
49
--construction d'un objet memoire avec les valeurs a inserer dans la bd 
	memoire := memoires_t(	UPPER(TRIM(p_isbn)),
	                		p_titre,
   		            		p_langue,
   		            		p_typetud, 
	   		        		p_promotion,
   	   		        		DOM_NOTICE_t(p_notice),
							l_refmotscles_t(),
							l_auteurs_t(),
							l_refexemplaires_t()
						);
 
    memoire.INSERE_MEMOIRE; --insere un memoire dans la bd 
 
	--si des auteurs ont ete affecte au memoire 
	IF(TRIM(p_auteur(1))<>'aucunauteur')
	THEN
	    --pour chaque auteur 
		FOR i IN 1..p_auteur.count 
		LOOP	
	    	DECLARE
		 		m_nom_auteur    obj_auteurs.NOM%type;
		 		m_prenom_auteur obj_auteurs.PRENOM%type;
		 		m_place number;
		 		m_num_auteur obj_auteurs.REFAUTEUR%TYPE;
		 		m_auteurnom obj_auteurs.REFAUTEUR %type;
			BEGIN
			    --decompose le memoire en nom et prenom
    	 		m_place         := INSTR(p_auteur(i),' ');
		 		m_nom_auteur    := TRIM(SUBSTR(p_auteur(i),1,m_place));
		 		m_prenom_auteur := TRIM(SUBSTR(p_auteur(i),m_place));
 
 
				  SELECT to_char(SEQ_AUTEURS.nextval)
 	       	  	  INTO m_num_auteur
 	       	  	  FROM DUAL;
 
				  --INSERT INTO TEST VALUES(m_num_auteur,m_nom_auteur,m_prenom_auteur);
 
				  INSERT INTO TABLE
				  		 (SELECT listeauteurs FROM OBJ_MEMOIRE WHERE Refouvrage = UPPER(TRIM(p_isbn)))
				  VALUES (auteurs_t(to_char(m_num_auteur),UPPER(m_nom_auteur),UPPER(m_prenom_auteur)));
 
				  EXCEPTION
				  WHEN OTHERS THEN htp.print('ERRREUR BIBLIO : '||sqlcode||sqlerrm||'m_num_auteur = '||m_num_auteur||' p_isbn '||p_isbn || 'nom_auteur ' || m_nom_auteur || 'prenom_auteur ' || m_prenom_auteur);
 
	    	 END;
		END LOOP;
	 END IF;