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

SQL Oracle Discussion :

[Aide Fonction Oracle]


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Par défaut [Aide Fonction Oracle]
    Bonjour, suite à une évolution, je dois obtenir la liste des intervenants (Rolnom + ' ' + ItvNom) concatener par 'ALT + ENtree' pour un mandat donne)
    Auparavant , je pouvais choisir qu'un seul role ( RolId ) alors que maintenant je peux choisir autant de role que je veux dans ma sélection.
    Je vous donne ma requete :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    CREATE OR REPLACE FUNCTION GetItvList (pNumItv INTEGER, pMdtId IN MDT.MDTIDINI%TYPE, pItvId INTEGER, pRolId INTEGER)
    RETURN VARCHAR2
    IS
    /* Fonction utilisee pour la generation des etats
    Description : obtenir la liste des intervenants (Rolnom + ' ' + ItvNom) concatener par 'ALT + ENtree' pour un mandat donne)
    Entrees : pNumItv - 0 : Tous les intervenants
    1 : Tremier intervenant
    2 : Tous les intervenants ou Tous sauf le premier
    pMdtId : le numero du syst. du mandat
    pItvId : l'identifiant de l'intervenant
    pRolId ; l'identifiant du role
    */
    sResult VARCHAR2(1000) := '';
    sMdtId INTEGER;
    itvid1 INTEGER;
    rolid1 INTEGER;
    -- Desclaration du cursor qui va contenir la liste des itvs sauf itv1 et itv2
    CURSOR curItvs(pmdtid IN INTEGER, pitvid IN INTEGER, prolid IN INTEGER) IS
    SELECT ROLNOM, ITVNOM
    FROM
    (
    SELECT ROL.ROLNOM, ITV.ITVNOM ITVNOM
    FROM ITV
    INNER JOIN ACT ON ITV.ITVID = ACT.ITVID
    INNER JOIN ROL ON ROL.ROLID = ACT.ROLID
    WHERE ACT.MDTID = pmdtid
    AND (
    (pitvid IS NULL AND prolid IS NULL) OR
    (pitvid IS NULL AND 1 IS NOT NULL) OR
    (pitvid IS NOT NULL AND prolid IS NULL AND ACT.ITVID <> pitvid) OR
    (pitvid IS NOT NULL AND prolid IS NOT NULL AND (ACT.ROLID <> prolid OR ACT.ITVID <> pitvid))
    )
    ORDER BY ROL.ROLNOM, ITV.ITVNOM
    );
    BEGIN
    sMdtId := pMdtId;
    IF (pItvId IS NULL AND pRolId IS NULL) THEN
    SELECT ITVID, ROLID INTO itvid1, rolid1
    FROM
    (
    SELECT ROWNUM num, ITVID, ROLID
    FROM
    (
    SELECT ITV.ITVID, ROL.ROLID
    FROM ITV
    INNER JOIN ACT ON ITV.ITVID = ACT.ITVID
    INNER JOIN ROL ON ROL.ROLID = ACT.ROLID
    WHERE ACT.MDTID = sMdtId
    ORDER BY ROL.ROLNOM, ITV.ITVNOM
    )
    )
    WHERE num = 1;
    ELSE
    itvid1 := pItvId;
    rolid1 := pRolId;
    END IF;
    -- Ontenir le premier intervenant (Rele + Nom)
    IF (pNumItv = 1) THEN
    SELECT ROLITVOM
    INTO sResult
    FROM
    (
    SELECT ROWNUM num, ROLITVOM
    FROM
    (
    SELECT ROL.ROLNOM || ' ' || ITV.ITVNOM ROLITVOM
    FROM ITV
    INNER JOIN ACT ON ITV.ITVID = ACT.ITVID
    INNER JOIN ROL ON ROL.ROLID = ACT.ROLID
    WHERE ACT.MDTID = sMdtId
    AND (itvid1 IS NULL OR ACT.ITVID = itvid1)
    AND (rolid1 IS NULL OR ACT.ROLID = rolid1)
    ORDER BY ROL.ROLNOM, ITV.ITVNOM
    )
    )
    WHERE num = 1;
    -- Obtenir les autres intervenants
    ELSIF (pNumItv = 0) THEN
    FOR ITVS IN curItvs(sMdtId, pItvId, pRolId)
    LOOP
    IF (LENGTH(TO_CHAR(sResult || ITVS.ROLNOM || ' ' || ITVS.ITVNOM || CHR(10))) < 10000) THEN
    sResult := sResult || ITVS.ROLNOM || ' ' || ITVS.ITVNOM || CHR(10);
    END IF;
    END LOOP;
    ELSIF (pNumItv = 2) THEN
    SELECT ITVID, ROLID INTO itvid1, rolid1
    FROM
    (
    SELECT ROWNUM num, ITVID, ROLID
    FROM
    (
    SELECT ITV.ITVID, ROL.ROLID
    FROM ITV
    INNER JOIN ACT ON ITV.ITVID = ACT.ITVID
    INNER JOIN ROL ON ROL.ROLID = ACT.ROLID
    WHERE ACT.MDTID = sMdtId
    AND (pItvId IS NULL OR ACT.ITVID = pItvId)
    AND (pRolId IS NULL OR ACT.ROLID = pRolId)
    ORDER BY ROL.ROLNOM, ITV.ITVNOM
    )
    )
    WHERE num = 1;
    FOR ITVS IN curItvs(sMdtId, itvid1, rolid1)
    LOOP
    IF (LENGTH(TO_CHAR(sResult || ITVS.ROLNOM || ' ' || ITVS.ITVNOM || CHR(10))) < 10000) THEN
    sResult := sResult || ITVS.ROLNOM || ' ' || ITVS.ITVNOM || CHR(10);
    END IF;
    END LOOP;
    END IF;
    RETURN sResult;
    END;
    /
    Je dois générer la meme chose mais avec plusieurs roles possibles maintenant .Comment puis je faire sachant que mon pRolId en paramètre est maintenant une chaine de caractère d'Id séparés par des virgules.
    Les zones en rouge sont les zones ou je rencontre le champ problématique....

  2. #2
    Membre expérimenté Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Par défaut
    Des gens regardent ma demande d'aide mais ne daigne pas me répondre... pas cool ça...
    Est il possible de parser en Oracle un varchar ?

Discussions similaires

  1. aide fonction tri heapsort (création du tas)
    Par Invité dans le forum C
    Réponses: 6
    Dernier message: 24/11/2009, 00h27
  2. Besoin d'aide avec oracle database 10g
    Par air dans le forum Oracle
    Réponses: 1
    Dernier message: 16/10/2005, 06h43
  3. besoin d'aide fonction avec fichier (debutant)
    Par boby61 dans le forum Débuter
    Réponses: 9
    Dernier message: 14/03/2005, 11h22
  4. [Fonction Oracle] Convertir des secondes en heure
    Par falcon dans le forum Oracle
    Réponses: 12
    Dernier message: 18/11/2004, 11h56
  5. Réponses: 4
    Dernier message: 10/11/2004, 14h58

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