Exécution d'une requête SQL, qui retourne une table
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 :
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 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; |
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".
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 :
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
| 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; |
Plusieurs erreurs apparaissent, j'ai besoin de vos compétences plus complète dans le domaine :D
Merci à tous !