Bonjour,

J'ai créé une procédure dans un package et quand je fais appel à cette proc dans une application développée avec (HTMLDB maintenant appelé APEX) j'obtient cet erreur :
ORA-20001: ORA-01403: no data found Erreur signalee ETAPE : 4.

J'ai mis la variable ETAPE pour savoir à quel moment l'erreur survient, tout se passe comme si la première insertion ne se fait pas.

voici mon package (merci de m'aider à trouver ce qui ne va pas):

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
101
102
103
104
105
106
107
108
109
create or replace package POIR_1_PKG as
    PROCEDURE proc_ajouter(p_nom in VARCHAR2,nom in VARCHAR2,n_app_r in VARCHAR2,n_civ_r in VARCHAR2,t_rue_r in VARCHAR2,n_rue_r in VARCHAR2,cp_r in VARCHAR2,cellu_r in VARCHAR2,v_r in VARCHAR2,p_r in VARCHAR2,n_app_b in VARCHAR2,n_civ_b in VARCHAR2,t_rue_b in VARCHAR2,n_rue_b in VARCHAR2,cp_b in VARCHAR2,cellu_b in VARCHAR2,v_b in VARCHAR2,p_b in VARCHAR2);
END POIR_1_PKG;
 
 
/****************   BODY   ******************************************************/
 
create or replace package BODY POIR_1_PKG as
	PROCEDURE proc_ajouter(p_nom in VARCHAR2,nom in VARCHAR2,n_app_r in VARCHAR2,n_civ_r in VARCHAR2,t_rue_r in VARCHAR2,n_rue_r in VARCHAR2,cp_r in VARCHAR2,cellu_r in VARCHAR2,v_r in VARCHAR2,p_r in VARCHAR2,n_app_b in VARCHAR2,n_civ_b in VARCHAR2,t_rue_b in VARCHAR2,n_rue_b in VARCHAR2,cp_b in VARCHAR2,cellu_b in VARCHAR2,v_b in VARCHAR2,p_b in VARCHAR2)
	is
	id_Type_Rue number;
	id_Ville number;
	id_Type_Adresse number;
	id_adresse_res number;
	id_adresse_bur number;
        Etape number;
        l_count number;      
       	Begin
	     --BEGIN TRANSACTION 'debut';
 
	     Etape := 0;
	     -- Prendre l id du type de rue de la residence
	     select IdTypeRue into id_Type_Rue from TYPE_RUE where Nom = t_rue_r;
 
	     Etape := Etape + 1;
	     -- Prendre l id de la ville de la residence
	     select idVille into id_Ville from VILLE where Nom = v_r AND IdProvince = (select IdProvince from PROVINCE where Nom = p_r);
 
	     Etape := Etape + 1;	     
	     -- SAVEPOINT ajout_adresse_res;
	     -- L'adresse existe deja ne pas la rajouter dans la base, prendre son id
		select count(*) into l_count from Adresse where
		UPPER(NumeroAppartement) = UPPER(n_app_r) AND
		UPPER(NumeroCivic) = UPPER(n_civ_r) AND
	     	idTypeRue = id_Type_Rue AND
	     	UPPER(NomRue) = UPPER(n_rue_r) AND
	     	UPPER(Cellule) = UPPER(cellu_r) AND
	     	UPPER(CodePostal) = UPPER(cp_r) AND
	     	IdVille = id_Ville AND
	     	IdTypeAdresse = 2;
 
	     Etape := Etape + 1;
	     if (l_count = 0) then   -- donc l'adresse n'existe pas dans la table
	     	Etape := Etape + 1;
	     	insert into ADRESSE (NumeroAppartement,NumeroCivic, IdTypeRue,NomRue,Cellule,CodePostal,IdVille,IdTypeAdresse) values(n_app_r,n_civ_r,id_Type_Rue,n_rue_r, cellu_r,cp_r,id_Ville,2);
	     end if;
 
	     Etape := Etape + 1;
	     -- Prendre idadresse de la residence
	     select IdAdresse into id_adresse_res from Adresse where
		UPPER(NumeroAppartement) = UPPER(n_app_r) AND
		UPPER(NumeroCivic) = UPPER(n_civ_r) AND
	     	idTypeRue = id_Type_Rue AND
	     	UPPER(NomRue) = UPPER(n_rue_r) AND
	     	UPPER(Cellule) = UPPER(cellu_r) AND
	     	UPPER(CodePostal) = UPPER(cp_r) AND
	     	IdVille = id_Ville AND
	     	IdTypeAdresse = 2;
 
	     Etape := Etape + 1;
	     -- Prendre l id du type de rue du bureau
	     select IdTypeRue into id_Type_Rue from TYPE_RUE where Nom = t_rue_b;
 
	     Etape := Etape + 1;
	     -- Prendre l id de la ville du bureau
	     select idVille into id_Ville from VILLE where Nom = v_b AND IdProvince = (select IdProvince from PROVINCE where Nom = p_b);	     
 
	     -- SAVEPOINT ajout_adresse_bur;	     
	     -- Si l'adresse existe deja ne pas la rajouter dans la base, prendre son id
		select count(*) into l_count from Adresse where
		UPPER(NumeroAppartement) = UPPER(n_app_b) AND
		UPPER(NumeroCivic) = UPPER(n_civ_b) AND
	     	idTypeRue = id_Type_Rue AND
	     	UPPER(NomRue) = UPPER(n_rue_b) AND
	     	UPPER(Cellule) = UPPER(cellu_b) AND
	     	UPPER(CodePostal) = UPPER(cp_B) AND
	     	IdVille = id_Ville AND
	     	IdTypeAdresse = 1;
 
	     if (l_count = 0) then   -- donc l'adresse n'existe pas dans la table
	     	insert into ADRESSE(NumeroAppartement,NumeroCivic, IdTypeRue,NomRue,Cellule,CodePostal,IdVille,IdTypeAdresse) values(n_app_b,n_civ_b,id_Type_Rue,n_rue_b, cellu_b,cp_b,id_Ville,1);
	     End if;
 
	     -- Prendre idadresse du bureau
	     select IdAdresse into id_adresse_bur from Adresse where
		UPPER(NumeroAppartement) = UPPER(n_app_b) AND
		UPPER(NumeroCivic) = UPPER(n_civ_b) AND
	     	idTypeRue = id_Type_Rue AND
	     	UPPER(NomRue) = UPPER(n_rue_b) AND
	     	UPPER(Cellule) = UPPER(cellu_b) AND
	     	UPPER(CodePostal) = UPPER(cp_B) AND
	     	IdVille = id_Ville AND
	     	IdTypeAdresse = 1;
 
	     -- AJOUT DANS TABLE cONTACTS
	     -- SAVEPOINT ajout_contacts;	     
	     Insert into Contacts(Matricule,Nom,Prenom,IdTypeRessource,IdAdresseResidence,IdFonction,IdAdresseBureau,Courriel,IdDepartement) values(mat,nom, p_nom, 2, id_adresse_res, 3, id_adresse_bur,courriel,205);
 
	     COMMIT;
	     EXCEPTION
    	     	WHEN OTHERS THEN
    	     	BEGIN
             		ROLLBACK; -- TO ajout_adresse_res;
             		RAISE_APPLICATION_ERROR (-20001,SQLERRM(SQLCODE) || ' Erreur signalee ETAPE : ' || Etape);
                END; 
 
	End;
 
END POIR_1_PKG;