Bonjour à tous,
Tout d'abord je précise que je débute en PL SQL, j'ai quelques expériences en SQL en revanche.
J'ai pour but de vérifier les doublons sur une table donnée.
J'ai réussis a créer une procédure qui me retourne tous les doublons d'une table, dans une autre table, comme ceci :
Je retourne ici tous les doublons sur le champ "refr_prdt" qui se trouvent dans la table MB_cibleProEquipement, et je met les lignes doublonnées dans la nouvelle table "TP_VERIF_DOUBLONS".
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 DECLARE table_t LONG; TYPE tab_champs IS VARRAY (100) OF LONG; t_champs tab_champs; BEGIN -- CHAMPS A RENSEIGNER table_t := 'MB_cibleProEquipement' ; t_champs := tab_champs('REFR_PRDT'); -- REQUETE QUI S'EXECUTE Execute immediate 'DROP table TP_VERIF_DOUBLONS'; Execute immediate ' Create table TP_VERIF_DOUBLONS AS select a.* from '||table_t||' a , ( select '||t_champs(1)||' from '||table_t||' group by '||t_champs(1)||' having count('||t_champs(1)||')>1 ) b where a.'||t_champs(1)||' = b.'||t_champs(1)||' order by a.'||t_champs(1)||' ' ; END;
Jusqu'ici tout fonctionne correctement.
Je voudrais maintenant créer la meme chose mais en FONCTION PLSQL. C'est à dire pouvoir appeler ma fonction avec un
"select verif_doublons("MB_cibleProEquipement","refr_prdt") from dual;" et avoir le résultat en sortie.
J'ai essayé plusieurs choses, dont entre autre :
Plusieurs erreurs apparaissent, j'ai besoin de vos compétences plus complète dans le domaine
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 CREATE OR REPLACE FUNCTION verif_doublons(table_t in varchar2, champs_t in varchar2) RETURN SYS_REFCURSOR AS o_cursor SYS_REFCURSOR; BEGIN OPEN o_cursor FOR execute immediate ( ' select a.* from '|| table_t ||' a , ( select '||champs_t||' from '||table_t||' group by '||champs_t||' having count('||champs_t||')>1 ) b where a.'||champs_t||' = b.'||champs_t||' order by a.'||champs_t||'; ' ); RETURN o_cursor; -- exception part END;
Merci à tous !
Partager