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 :

[ORA-22908] référence à une valeur de table NULL!!!


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1
    Par défaut [ORA-22908] référence à une valeur de table NULL!!!
    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;

  2. #2
    Membre émérite Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    Je ne comprends la description du problème, notamment parce que je sais pas si le bout de code qui est posté correspond a ce qui marche ou ce qui ne marche pas. A mon avis, il correspond a ce qui marche parce qu'une méthode d'insertion est appelée.

    Il faut que le record existe dans la base de donnees, de maniere a ce que la structure qui correspond a la NESTED TABLE soit déjà créée avant de la référencer avec l'operateur TABLE.
    Une autre possibilité, plutôt que d’appeler le constructeur puis la méthode d’insertion, peux consister a appeler une méthode qui fera les deux.

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/02/2013, 16h05
  2. Réponses: 2
    Dernier message: 01/02/2013, 15h50
  3. verifier si une valeur entier est null
    Par sepehr_gsfc dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 15/03/2009, 21h53
  4. Chercher une valeur dans table Access
    Par PC81 dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/04/2008, 08h21
  5. [INSERT / UPDATE] Remplacer une valeur vide par NULL
    Par jissay dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 28/09/2006, 14h15

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