IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Recupérer et afficher triplet doublons ?


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut Recupérer et afficher triplet doublons ?
    Bonjour/soir;

    Je sais qu'il est possible d'interroger une table pour obtenir les doublons d'un triplet d'attributs mais quand est il pour leur stockage lors d'un appel dynamique du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function retourn_triplet(nom_table) return ???
    begin
    EXECUTE IMMEDIATE 'SELECT a,b,c FROM '|| tabl ||' group by a,b,c having count(*) > 1' INTO ???
    return ???
    end;
    Quel type de stockage utilisé ?

    Merci pour votre aide.Bien à vous.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 21
    Par défaut
    Salut,
    essaye toi le cursor dynamique (voir l'exemple ce-dessous) :

    Code plsql : 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
     
    declare 
    type resultat is record (
    a varchar2(15),
    b varchar2(15),
    c varchar2(15));
     
    type tableau is table of resultat index by binary_integer;
    liste2 tableau;
     
     
    function retourn_triplet(nomTable varchar2) return tableau
    as
    type curType is ref cursor;
    cur curType;
    liste tableau;
    i int := 1;
    begin
    open cur for 'select a,b,c  from '||nomTable ||' group by a,b,c having count(*) >0 ';
    loop
    fetch cur into liste(i);
    exit when cur%notfound;
    i := i +1;
    end loop;
    return liste;
    end cont;
    begin
    liste2 := retourn_triplet('employe');
    for i in 1..liste2.last loop
    dbms_output.put_line(liste2(i).a);
    end loop;
    end;

    au plaisir,
    khalid.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    Bonjour et merci d'avoir répondu Khalid

    Sauf que mon type triplet est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type triplet IS record ( MODELE varchar2(16), PORT varchar2(16), N0_OCCURRENCE numeric(2));
     
    type t_doubl_mod_port_occ is table of triplet INDEX BY binary_integer;
    doublons t_doubl_mod_port_occ;
    ...
    Voici le code de ma fonction :
    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
     
    FUNCTION recherche_doublon_mod_port (tabl IN VARCHAR2) 
    RETURN t_doubl_mod_port_occ
    IS
    	type curType IS ref cursor;
    	cur curType;	
    	return_doubl t_doubl_mod_port_occ;
    	i int:=1;
    BEGIN 
    	OPEN cur FOR 'SELECT MODELE,PORT,N0_OCCURRENCE FROM '|| tabl ||' group by MODELE,PORT,N0_OCCURRENCE having count(*) > 1' ;
    	LOOP 
    		FETCH cur INTO return_doubl(i);
    		EXIT WHEN cur%NOTFOUND;
    		i:= i+1;
    	END LOOP;
    	RETURN return_doubl;
    END recherche_doublon_mod_port;
    ...
    J'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE
    *
    ERROR at line 1:
    ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at line 34 ==> FETCH cur INTO return_doubl(i);
    ORA-06512: at line 47 ==>  doublons:=recherche_doublon_mod_port (collection(i));
    Si quelqu'un a une idée pour corriger cette erreur ...?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    bonjour, il faudrait affecté les variable une par une du style
    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
     
    FUNCTION recherche_doublon_mod_port (tabl IN VARCHAR2) 
    RETURN t_doubl_mod_port_occ
    IS
    	type curType IS ref cursor;
    	cur curType;	
    	return_doubl t_doubl_mod_port_occ;
    	i int:=1;
            CUR_MODELE varchar2(16);
            CUR_PORT varchar2(16);
            CUR_N0_OCCURRENCE numeric(2);
     
    BEGIN 
    	OPEN cur FOR 'SELECT MODELE,PORT,N0_OCCURRENCE FROM '|| tabl ||' group by MODELE,PORT,N0_OCCURRENCE having count(*) > 1' ;
    	LOOP 
    	    FETCH cur INTO CUR_MODELE ,CUR_PORT ,CUR_N0_OCCURRENCE ;
                return_doubl(i).MODELE:=CUR_MODELE ;
                return_doubl(i).PORT:=CUR_PORT ;
                return_doubl(i).N0_OCCURRENCE:=CUR_N0_OCCURRENCE ;
    		EXIT WHEN cur%NOTFOUND;
    		i:= i+1;
    	END LOOP;
    	RETURN return_doubl;
    END recherche_doublon_mod_port;
    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment afficher les doublons?
    Par fdsthefreeman dans le forum SQL
    Réponses: 2
    Dernier message: 06/08/2007, 12h51
  2. ne pas afficher les doublons
    Par axamen dans le forum SQL
    Réponses: 17
    Dernier message: 23/05/2007, 13h45
  3. afficher les doublons avec mysql
    Par oceanbigone dans le forum Requêtes
    Réponses: 10
    Dernier message: 02/10/2006, 15h57
  4. [SQL Server] Requete qui affiche les doublons
    Par Vesta dans le forum Langage SQL
    Réponses: 11
    Dernier message: 26/05/2006, 13h42
  5. Afficher les doublons SQL
    Par kotoji dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/01/2005, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo