Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2006, 11h39   #1
Candidat au titre de Membre du Club
 
Étudiant
Inscription : décembre 2006
Messages : 65
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2006
Messages : 65
Points : 12
Points : 12
Par défaut [PL/SQL] réference a un ensemble non initialisé

je ne comprends pas a quoi correspond l'erreur donc voici mon code:

Code :
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
DECLARE 
empl courrier_empl.num_emp%TYPE;
noml courrier_empl.nom%TYPE;
dptl courrier_empl.num_dept%TYPE;
sala courrier_empl.salaire%TYPE;

nempl NUMBER(4);
nnoml CHAR(10);
ndptl NUMBER(4);
nsala NUMBER(7,2);

TYPE type_employes
IS TABLE OF employes%ROWTYPE;
num_emp type_employes;
nom type_employes;
num_dept type_employes;
salaire type_employes;
i employes.salaire%TYPE;

BEGIN 
	--i:=type_employes(num_emp,nom,num_dept,salaire);
	FOR i IN salaire.first..salaire.last //ORA-06531:réference a un ensemble non initialisé
	LOOP
		
		SELECT num_emp,nom,num_dept,salaire 
		INTO nempl,nnoml,ndptl,nsala FROM employes WHERE salaire>2331.00;
		INSERT INTO courrier_empl VALUES (nempl,nnoml,ndptl,nsala);

	
	END LOOP;
	
END;
/
CROSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2006, 12h06   #2
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Tu fais une boucle sur un ensemble vide : nulle part dans ton code tu n'as rempli le tableau salaire.

NB : merci d'utiliser les balises code qui améliorent la lisibilité.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2006, 12h37   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
on peut déjà remplacer :
Code :
1
2
3
4
 
		SELECT num_emp,nom,num_dept,salaire 
		INTO nempl,nnoml,ndptl,nsala FROM employes WHERE salaire>2331.00;
		INSERT INTO courrier_empl VALUES (nempl,nnoml,ndptl,nsala);
Par :
Code :
1
2
3
 
INSERT INTO courrier_empl SELECT num_emp,nom,num_dept,salaire 
		FROM employes WHERE salaire>2331.00;
et en effet, si le tableau n'est pas rempli la boucle ne peut pas fonctionner
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2006, 13h21   #4
Candidat au titre de Membre du Club
 
Étudiant
Inscription : décembre 2006
Messages : 65
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2006
Messages : 65
Points : 12
Points : 12
bah en fait je n'avais pas fournit avec le code les table mais elles sont creer les voici:
Code :
1
2
3
4
5
CREATE TABLE departement
(	num_dept number(4) PRIMARY KEY,
	nom_dept VARCHAR(20),
	localite char(10)
);
Code :
1
2
3
4
5
6
7
8
9
10
CREATE TABLE employes
(	num_emp NUMBER(4) PRIMARY KEY,
	nom CHAR(10) NOT NULL CHECK (NOM=UPPER(NOM)),
	fonction CHAR(9),
	superieur NUMBER(4) REFERENCES employes(num_emp),
	date_embauche DATE,
	salaire NUMBER(7,2) CHECK(salaire>1000),
	comission NUMBER (7,2),
	num_dept number(4) NOT NULL REFERENCES departement (num_dept)
);
Code :
1
2
3
4
5
6
7
CREATE TABLE courrier_empl
(
num_emp NUMBER(4),
nom CHAR(10),
num_dept NUMBER(4),
salaire NUMBER(7,2)
);
Code :
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
DECLARE 
empl courrier_empl.num_emp%TYPE;
noml courrier_empl.nom%TYPE;
dptl courrier_empl.num_dept%TYPE;
sala courrier_empl.salaire%TYPE;
 
nempl NUMBER(4);
nnoml CHAR(10);
ndptl NUMBER(4);
nsala NUMBER(7,2);
 
TYPE type_employes
IS TABLE OF employes%ROWTYPE;
num_emp type_employes;
nom type_employes;
num_dept type_employes;
salaire type_employes;
i employes.salaire%TYPE;
 
BEGIN 
	--i:=type_employes(num_emp,nom,num_dept,salaire);
	FOR i IN salaire.first..salaire.last //ORA-06531:réference a un ensemble non initialisé
	LOOP
 
		INSERT INTO courrier_empl SELECT num_emp,nom,num_dept,salaire 
		FROM employes WHERE salaire>2331.00;
 
 
	END LOOP;
 
END;
/
CROSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2006, 14h08   #5
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Cela ne change rien, nulle part dans le code que tu nous fournis, ton tableau salaire est rempli. De plus, je ne comprends pas à quoi sert ta boucle

Pour la deuxième fois, merci de penser aux balises code
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2006, 14h50   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
je ne saurais trop te conseiller de lire ce tutoriel : http://sheikyerbouti.developpez.com/...?page=Chap5#L5 pour mieux appréhender tes problèmes.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h35.


 
 
 
 
Partenaires

Hébergement Web