Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 29/11/2010, 15h08   #1
Invité de passage
 
Inscription : avril 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 4
Points : 1
Points : 1
Par défaut Curseur à une inconnue

Bonjour,
Je souhaiterais insérer dans une table des données grâce à un curseur dans lequel se trouverait une variable 'depart'. Il existe deux tables POSTE et COLLEC. Un POSTE contient 1 ou plusieurs COLLEC. Le NUM_POSTE commence par le n° de département. Il s'agit d'insérer des données pour des postes dont le n° commence par 01, 02, 03 ou 04.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DECLARE
FOR depart IN 1..4
Loop
CURSOR CHD_CURSEUR IS
SELECT POSTE.NUM_POSTE, POSTE.LIBELLE LIB_P, COLLEC.CODE_BUDGET_COLLECTIVITE, COLLEC.LIBELLE LIB_C
FROM COLLEC, POSTE
WHERE COLLEC.POSTE_ID=POSTE.ID
AND POSTE.NUM_POSTE LIKE '0'||depart||'%'
;
end loop;
 
BEGIN
FOR ligne IN CHD_CURSEUR
LOOP
INSERT INTO AABB_BUDBET_COLLEC
(NUM_POSTE, LIBELLE_POSTE, CODE_BC, LIBELLE_BC)
VALUES (ligne.NUM_POSTE, ligne.LIB_P, ligne.CODE_BUDGET_COLLECTIVITE,
ligne.LIB_C)
;
end loop;
commit;
END;
/
Mais cela ne fonctionne pas. Pourriez-vous m'aider s'il vous plait.
Je vous en remercie par avance.
turtly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 16h08   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 925
Points : 1 925
Par rapport à ton code le For depart in 1..4 Loop doit être placé dans le begin et non dans la déclaration :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE
depart number;
CURSOR CHD_CURSEUR (depart) IS
	SELECT POSTE.NUM_POSTE, POSTE.LIBELLE LIB_P, COLLEC.CODE_BUDGET_COLLECTIVITE, COLLEC.LIBELLE LIB_C
	FROM COLLEC, POSTE
	WHERE COLLEC.POSTE_ID=POSTE.ID
	AND POSTE.NUM_POSTE LIKE '0'||depart||'%';
 
BEGIN
FOR depart IN 1..4 Loop
	FOR ligne IN CHD_CURSEUR (depart) LOOP
		INSERT INTO AABB_BUDBET_COLLEC (NUM_POSTE, LIBELLE_POSTE, CODE_BC, LIBELLE_BC)
		VALUES (ligne.NUM_POSTE, ligne.LIB_P, ligne.CODE_BUDGET_COLLECTIVITE,ligne.LIB_C);
	end loop;
end loop;	
commit;
END;
/
Mais l'utilisation du curseur est inutile et contre performante, il faut faire un insert into select ensembliste :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
DECLARE
depart number;
begin
FOR depart IN 1..4 Loop
	INSERT INTO AABB_BUDBET_COLLEC (NUM_POSTE, LIBELLE_POSTE, CODE_BC, LIBELLE_BC)
	SELECT POSTE.NUM_POSTE, POSTE.LIBELLE LIB_P, COLLEC.CODE_BUDGET_COLLECTIVITE, COLLEC.LIBELLE LIB_C
	FROM COLLEC, POSTE
	WHERE COLLEC.POSTE_ID=POSTE.ID
	AND POSTE.NUM_POSTE LIKE '0'||depart||'%';
end loop;
commit;
end;
Et évidemment si c'est du one shot et que tu n'as que 4 départements à gérer autant ne faire qu'une requête :
Code :
1
2
3
4
5
INSERT INTO AABB_BUDBET_COLLEC (NUM_POSTE, LIBELLE_POSTE, CODE_BC, LIBELLE_BC)
SELECT POSTE.NUM_POSTE, POSTE.LIBELLE LIB_P, COLLEC.CODE_BUDGET_COLLECTIVITE, COLLEC.LIBELLE LIB_C
FROM COLLEC, POSTE
WHERE COLLEC.POSTE_ID=POSTE.ID
AND (POSTE.NUM_POSTE LIKE '01%' OR POSTE.NUM_POSTE LIKE '02%' OR POSTE.NUM_POSTE LIKE '03%' OR POSTE.NUM_POSTE LIKE '04%')
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 09h37   #3
Invité de passage
 
Inscription : avril 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 4
Points : 1
Points : 1
Par défaut Merci

Bonjour,
Un grand merci pour cette aide. J'ai utilisé la deuxième solution et elle fonctionne à merveille.
turtly est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h49.


 
 
 
 
Partenaires

Hébergement Web