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

Oracle Discussion :

emploi d'un sub select dans une procédure - Oracle 8i -


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 14
    Points
    14
    Par défaut emploi d'un sub select dans une procédure - Oracle 8i -
    Bonjour,

    je désirerais juste savoir s'il est autorisé d'utiliser un sub select au sein d'une procédure avec curseur. Voici ma procédure définie pour un package. Le compilateur (TOAD) m'indique qu'il attend 'autre chose' qu'un select à cet endroit.

    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
                    as   PROCEDURE ca_proprio(
          c_real   IN   OUT  curs_ca_prop,
          site     in   number,
          annee    IN   NUMBER,
          mois     IN   NUMBER,
          now      IN   number
    	    )
     
    IS
     
       BEGIN
     
    	 OPEN c_real
     
    	 FOR
     
    SELECT DISTINCT
     
    -- sites.cell_denomination as site_nom,
    enseignes.ens_libelle AS enseigne,
    secteurs_activites.sect_act_libelle as secteur,
    contrats.cont_pk,
    natures_contrats.nat_cont_libelle,
    contrats_cell_surf.sup_loc as sup_loc,
    (SELECT contrats1.cont_avenant_prisedeffet
           FROM contrats contrats1
         WHERE (contrats1.cont_initial = contrats.cont_initial AND contrats1.cont_avenant = contrats.cont_avenant))as cont_date_debut,
    --((NVL((SELECT contrats1.cont_avenant_prisedeffet
     --       FROM contrats contrats1
     --       WHERE (contrats1.cont_initial =  contrats.cont_initial AND contrats1.cont_avenant = contrats.cont_avenant + 1)),NULL)))cont_date_fin,
    contrats.cont_code,
     
    round(dev_get_cumul12(mois,annee,contrats.cont_PK)) as cumul12
     
    FROM
    contrats,
    --contrats_ca,
    enseignes,
    secteurs_activites,
    contrats_cell_surf,
    contrats_tiers,
    natures_contrats
     
    WHERE           
    ((enseignes.ens_pk(+) = contrats.cont_ens_fk)
    and (contrats.cont_pk = contrats_tiers.cont_trs_cont_fk)
    and (natures_contrats.nat_cont_pk = contrats.cont_nat_cont_fk)
    AND (contrats_tiers.cont_trs_typ_trs = '1')
    and (contrats.cont_pk = contrats_cell_surf.cont_pk)
    -- and (ca_proprio.cont_pk = contrats.cont_pk)
    -- and (contrats_ca.cont_ca_site_fk = sites.cell_pk)
    -- AND (contrats.cont_pk = contrats_ca.cont_ca_cont_fk(+))
    AND (secteurs_activites.sect_act_pk(+) = contrats.cont_sect_act_fk)
    AND (cont_site_fk = site)
    AND (cont_nat_cont_fk IN (11, 12, 34, 36, 37, 38, 54))              -- contrats commerciaux et emphythéotiques
    --AND (contrats.cont_nat_cont_fk IN (33,56))                        -- contrats reserves
    --AND (now BETWEEN '2004'and '2005')
    AND (enseignes.ens_libelle IS NOT NULL));
     
    end ca_proprio;

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 138
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Théoriquement, rien d'impossible dans votre cas. Cependant si TOAD vous dit qu'il "attend" quelque chose, c'est que c'est probablement le cas...

    Je ne suis pas un compilateur et le code que vous avez fourni est assez difficile à lire. De plus, je remarque qu'il y a des commentaire dans votre SELECT. Serait-il possible que ces commentaire soient le problème? Qu'ils mettent une virgule en commentaire de trop par exemple?

    Tout ce que je peux vous dire, c'est que ce que vous désirez faire est possible et supporté par ORACLE 8i.

    Épurez votre code, (en commencant par faire le select sur une seule table et les rajouter une à une...) Vous trouverez ainsi le problème.

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Je pense que le problème vient des lignes vides que vous avez mis entre vos instructions (ex : "select distinct" et votre liste de colonnes)

Discussions similaires

  1. Retourner un select dans une procédure
    Par jmjmjm dans le forum PL/SQL
    Réponses: 6
    Dernier message: 14/09/2012, 13h05
  2. Réponses: 1
    Dernier message: 12/11/2008, 11h45
  3. Réponses: 11
    Dernier message: 04/08/2008, 19h04
  4. Réponses: 4
    Dernier message: 28/08/2006, 14h04
  5. Réponses: 1
    Dernier message: 20/07/2006, 18h03

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