Bonjour, je vous explique en quelques phrases mon problème.

J'ai différentes procédures qui tournent (et qui fonctionnent) et qui me permettent, au final, de générer des statistiques.
Dans certaines de ces procédures, il me faudrait insérer des données dans une table à partir d'un select.
Donc j'ai mis en place une boucle basée sur un curseur. Ca fonctionne.
Cependant, ca fait un brol pas possible, c'est pas super lisible.

Donc, sachant que la table cible est toujours la même et que seule la requete liée au curseur change, j'aurais voulu faire une procédure qui ne s'occupe que de l'insert et de la boucle sur le curseur.

J'ai essayé en injectant la clause WHERE, mais une erreur d'operateur apparait. Normal puisqu'il attend une comparaison.
Dans ce genre là:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
PROCEDURE INSERT_VALUES_FROM_CURSOR (StatDay IN DATE, STAT_NAME VARCHAR2, WHERE_CLAUSE VARCHAR2) IS
CURSOR CURS IS
	SELECT STAT_DAY, RECORD_ID FROM TEMPDATA WHERE WHERE_CLAUSE;
BEGIN
	FOR Cur IN CURS
	LOOP
		INSERT INTO TABLE_CIBLE(FK_RECORD_ID, STAT_DATE, STAT_NAME) VALUES (Cur.RECORD_ID, TO_TIMESTAMP(StatDay), STAT_NAME);
	END LOOP ;
END;
Ensuite, j'ai eu l'idée de donner carrément le 'SQL statement' complet au curseur mais sans succès.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
PROCEDURE INSERT_VALUES_FROM_CURSOR (StatDay IN DATE, STAT_NAME VARCHAR2, SQL_STATEMENT VARCHAR2) IS
CURSOR CURS IS
	SQL_STATEMENT;
BEGIN
	FOR Cur IN CURS
	LOOP
		INSERT INTO TABLE_CIBLE(FK_RECORD_ID, STAT_DATE, STAT_NAME) VALUES (Cur.RECORD_ID, TO_TIMESTAMP(StatDay), STAT_NAME);
	END LOOP ;
END;
Donc pour récapituler, mon besoin est de pouvoir paramétrer la requête derrière mon curseur en fonction d'un parametre à lui donner (que ce soit une chaine de carcatère ou autre). Je précise que j'ai jamais touché à PL/SQL avant vendredi. Je suis donc un novice total.

Edit: L'environnement est en 10g ou 11g. Je ne me souviens plus bien. A priori, si c'est la même version que l'application server, je dirais 11g

Quelqu'un peu gentiment m'aider? :p

Merci d'avance.