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

PL/SQL Oracle Discussion :

problème d'insertion de donnée pl/sql developper 2000


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2004
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 45
    Points : 30
    Points
    30
    Par défaut problème d'insertion de donnée pl/sql developper 2000
    j'ai créé ma table en sql*plus oracle 8i et à l'aide de formulaire form builder oracle developper 2000 je voudrais inserrer les donnée mais après l'enregistrement je fais select *from intervention1 je constate que la ligne est dupliquée ce qui fais que je ne peus pas declarer une clé primaire pendant la création de la table sinon il y'aura erreur de violation de contraint d'intègrité vioci le code :
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    PROCEDURE ENREG_INTERV IS
    CURSOR Cur_interv IS --curseur qui selectionne le numero de tous les clients
    				select DISTINCT(num_interv)
    				from intervention1;
    				   num_interv number(6);		
    				  bool BOOLEAN; 
    			    alert number;
     
    BEGIN
    	:SYSTEM.MESSAGE_level:=5;
    		   OPEN Cur_interv;
    			 bool:=FALSE;
    			 LOOP  -- verification de l'existance du code
    			 		FETCH Cur_interv INTO num_interv;
    					EXIT WHEN Cur_interv%NOTFOUND;
    					IF num_interv =:tx_num_interv THEN
    						bool:=TRUE; -- Cas ou l'enregistrement existe
    						EXIT;
    	END IF;	
    END LOOP;
    IF bool=TRUE THEN
    		    --	code client  existant';--Message d'erreur
    	alert := show_alert('isertion impossible');
    		 ELSE
    						-- Debut de l'enregistrement
    IF :tx_num_interv IS NOT NULL THEN
     
    INSERT INTO INTERVENTION1(
     
     CODE_UNITE ,            
     DESIGNATION_ZONE,                                 
     NUM_INTERV ,            
     SECTION ,               
     LOTS ,                  
     PARCELLE ,              
     RANG ,                  
     NOM ,                   
     PRENOM ,                
     DATE_PAN_DECL,          
     DATE_CONSTAT ,          
     HEURE_CONSTAT ,         
     MIN_CONSTAT ,           
     DATE_TRANSMISSION ,     
     HEURE_TRANSMISSION ,    
     MIN_TRANSMISSION ,      
     DATE_INTERV_PAN ,       
     HEURE_INTERV,           
     MIN_INTERV ,
     NOM_CHEF_EQ ,           
     PRENOM_CHEF_EQ ,        
     NAT_PAN_SIGN ,          
     NAT_PANNE_CONSTATE ,           
     OBSERVATION ,           
     CLOTURE, 
     HEURE_TEMPS_MIS,
     MIN_TEMPS_MIS    )       
     	 VALUES(
     	          :TX_CODE_UNITE,             
                :TX_DESIGNATION_ZONE,                                 
        				:TX_NUM_INTERV,             
     						:TX_SECTION,                
     						:TX_LOTS,                   
     						:TX_PARCELLE,               
     						:TX_RANG,                   
     						:TX_NOM,                    
     						:TX_PRENOM,                 
     						:TX_DATE_PAN_DECL,          
     						:TX_DATE_CONSTAT,           
     						:TX_HEURE_CONSTAT,          
     						:TX_MIN_CONSTAT,            
     						:TX_DATE_TRANSMISSION,      
     						:TX_HEURE_TRANSMISSION ,    
     						:TX_MIN_TRANSMISSION,       
     						:TX_DATE_INTERV_PAN,        
     						:TX_HEURE_INTERV,           
     						:TX_MIN_INTERV,
     						:TX_NOM_CHEF_EQ ,           
     						:TX_PRENOM_CHEF_EQ ,        
     						:TX_NAT_PAN_SIGN,           
     						:TX_NAT_PANNE_CONSTATE,            
     						:TX_OBSERVATION ,           
     						:TX_CLOTURE, 
     						:TX_HEURE_TEMPS_MIS,
     						:TX_MIN_TEMPS_MIS    
     						);     
    						COMMIT;
     
    	            --REINITIALISATION DES DIFFERENTS CHAMPS  	
     
    	            --go_item(''); 					
    							--:aff_msg:='Saisissez un nouvel Enregistrement ';
     
    		   ELSE
    		alert:=SHOW_alert('inser_impos');
    							--GO_ITEM
                 END IF;	
    		END IF;
    			 CLOSE Cur_interv;
    			:SYSTEM.message_level:=0;
            END;

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    sur quel événement ce code est-il lancé ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Ce ne serait pas un probleme avec
    Les test sur les boolean ne serait-il pas comme avec le null, c'est a dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If bool is true then
    ou 
    if bool then
    sinon cela n'est jamais vrai et le else est toujours executé (cela m'est beaucoup arrivé au debut avec le NULL)

  4. #4
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    J'ai déjà rencontré des cas où un SELECT exécuté dans un trigger forms ne fonctionnait pas correctement : il ramenait bien les données la première fois, mais semblait avoir des problèmes de rafraichissement... La solution était de mettre tous les SELECT dans la base sous forme de package.

    Dans ton cas, tu peux déjà simplifier le code en ne balayant pas toute la table jusqu'à rencontrer ton num_interv, mais plutôt en ne recherchant que s'il y a des lignes avec ton num_interv (un COUNT ou un ROWNUM=1 par exemple).

Discussions similaires

  1. problème d'insertion dans une base SQL Server 2000 Via un trigger
    Par Alexandre_g dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/04/2009, 15h30
  2. problème d'insertion sur une BD SQL server 2000
    Par offspring140 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 22/05/2006, 11h11
  3. Réponses: 2
    Dernier message: 14/05/2004, 14h32
  4. problème d'insertion de données
    Par Falgan dans le forum ASP
    Réponses: 2
    Dernier message: 06/04/2004, 09h29
  5. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58

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