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 07/03/2007, 10h43   #1
Invité de passage
 
Inscription : mars 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 8
Points : 2
Points : 2
Par défaut problème de dynamisme dans une procédure

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
 
CREATE OR REPLACE PROCEDURE transaction_of_delete(l_commit_freq IN NUMBER) IS
CURSOR c1 IS
SELECT rowid FROM smf_closing_prices partition(P_SMF_SMFCP_20070305_D)
WHERE tstp_typ_stat_price NOT IN ('01','06','07');
TYPE rowtab IS TABLE of rowid INDEX BY BINARY_INTEGER;
id ROWTAB;	   
BEGIN
	LOOP
		OPEN c1;
		FETCH c1 BULK COLLECT INTO id LIMIT l_commit_freq;
		IF (id.count=0) THEN
		   EXIT;
		END IF;
		FORALL i IN id.FIRST..id.LAST
			   DELETE FROM smf_closing_prices WHERE rowid=id(i);
		COMMIT;
		CLOSE c1;
	END LOOP;
END transaction_of_delete;
/
Cela fonctionne sans prob! A savoir je travaille sous Oracle 8.1.7 et j'aimerais que cette procédure puisse recevoir la partition de la table que je veux traiter en paramètre. Comme vous le voyez pour le moment c'est statique excepté pour le bulk size.
Qqun saurait-il m'aider?
Merci
sherdogvdb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 10h46   #2
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
recherche EXECUTE IMMEDIATE sur le site
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 10h57   #3
Invité de passage
 
Inscription : mars 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 8
Points : 2
Points : 2
justement je suis occupé à chercher dans cette direction !
esperons que je trouve!
sherdogvdb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 11h43   #4
Invité de passage
 
Inscription : mars 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 8
Points : 2
Points : 2
voila g trouvé :

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
 
CREATE OR REPLACE PROCEDURE transaction_of_delete(l_partition IN VARCHAR2,
	   	  		  								  l_commit_freq IN NUMBER) IS
 
plsql_block VARCHAR2(1000);	   
BEGIN
	plsql_block := 'DECLARE CURSOR c1 IS '||
				   'SELECT rowid FROM smf_closing_prices '||
				   'PARTITION('||l_partition||') '||
				   'WHERE tstp_typ_stat_price not in (''01'',''06'',''07''); '||
				   'TYPE rowtab IS TABLE of rowid INDEX BY BINARY_INTEGER; '||
				   'id ROWTAB; '||
				   'BEGIN '||
				   'LOOP '||
				   'OPEN c1; '||
				   'FETCH c1 BULK COLLECT INTO id LIMIT '||l_commit_freq||'; '||
				   'IF (id.count=0) THEN '||
				   'EXIT; '||
				   'END IF; '||
				   'FORALL i IN id.FIRST..id.LAST '||
				   'DELETE FROM smf_closing_prices partition('||l_partition||') where rowid=id(i); '||
				   'COMMIT; '||
				   'CLOSE c1; '||
				   'END LOOP; '||
				   'END;';
	EXECUTE IMMEDIATE plsql_block;
END transaction_of_delete;
/
sherdogvdb 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 08h46.


 
 
 
 
Partenaires

Hébergement Web