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 :

Erreur = PLS-00382: expression is of wrong type


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut Erreur = PLS-00382: expression is of wrong type
    Bonjour
    je ne vois d'où peut provenir cette erreur PLS-00382: expression is of wrong type.

    Voici les parties de mon code concernées:

    Les declarations

    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
            janvier_      number(10,2);
            février_      number(10,2);
            mars_         number(10,2);
            avril_        number(10,2);
            mais_         number(10,2);
            juin_         number(10,2);
            juillet_      number(10,2);
            août_         number(10,2);
            septembre_    number(10,2);
            octobre_      number(10,2);
            novembre_     number(10,2);
            decembre_     number(10,2);    
            personel_    varchar(255);
            j varchar(255):='janvier  ';
            f varchar(255):='février  ';
            mr varchar(255):='mars  ';
            av varchar(255):='avril  ';
            ma  varchar(255):='mais  ';
            ju  varchar(255):='juin  ';
            jui varchar(2555):='juillet  ';
            au  varchar(2555):='août  ';
            sep varchar(255):='septembre  ';
            oct varchar(2555):='octobre  ';
            nov varchar(255):='novembre  ';


    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
     
    open plan1_c;
            loop
                fetch plan1_c into plan1_r;
                exit when plan1_c%notfound;
                open personel_c(plan1_r.code,plan1_r.personel);
                    loop
                        fetch personel_c into personel_r;
                        exit when personel_c%notfound;
                        plan_.domaine_:=plan1_r.dom;
                        plan_.code:=plan1_r.code;
                        plan_.nom:=plan1_r.n;
                        plan_.status:=plan1_r.st;
                        personel_:=plan1_r.personel;
                        PIPE ROW(plan_);
     
                        case mois                      
                         when j  and  anne=ANNE then ==>>>>>ERREUR ICI<<<<<<<
                                janvier_:=personel_r.bg;
                            when f  and  anne=ANNE then
                                février_:=personel_r.bg;
                            when mr     and  anne=ANNE then
                                mars_:=personel_r.bg;
                            when av    and  anne=ANNE then
                                avril_:=personel_r.bg;
                            when ma     and  anne=ANNE then
                                mais_:=personel_r.bg;
                            when ju     and  anne=ANNE then
                                juin_:=personel_r.bg;
                            when jui  and  anne=ANNE then
                                juillet_:=personel_r.bg;
                            when au   and  anne=ANNE then
                                août_:=personel_r.bg;  
                            when sep and  anne=ANNE-1 then
                                septembre_:=personel_r.bg;
                            when oct   and  anne=ANNE-1 then
                                octobre_:=personel_r.bg;
                            when nov and  anne=ANNE-1 then
                                 novembre_:= personel_r.bg;
                            else  decembre_:=personel_r.bg;
                        end case;
                    end loop;
    ....................................

    merci d'avance !!!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut oubli
    J'ai oublié d'ajouté cela :
    les declarations:
    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
        cursor plan1_c is 
                    select distinct tab.domaine_ as dom,
                        tab.code as code,
                        tab.nom as n,
                        NQI_CPPJ_PROJECT.targeT_start_date as deb,
                        NQI_CPPJ_PROJECT.TARGET_END_DATE as fin,
                        tab.status as st,
                        tab.personel as personel,
                        to_char(tab.jour,'yyyy') as anne
                    from table(RP_3.planification(deb_p,fin_p))tab,
                            nqi_cppj_project
                    where  NQI_CPPJ_PROJECT.CODE=tab.code;
                            plan1_r   plan1_c%rowtype;
     
        cursor personel_c(code varchar2,perso varchar2) is 
                        select distinct tab.code,tab.personel as personel,to_char(tab.jour,'month') as month_,tab.budget as bg
                        from table(RP_3.planification(deb_p,fin_p))tab 
                        where code=tab.code and perso=tab.personel 
                        order by 1,3;
     
        personel_r  personel_c%rowtype;
        plan_ PLANIFICATION22_TYPE := PLANIFICATION22_TYPE(null,null,null,null,null,
                                                            0,0,0,0,0,0,
                                                            0,0,0,0,0,0);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                        mois:=personel_r.month_;

  3. #3
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 44
    Par défaut
    Bonjour,


    CASE est une instruction du SQL, vous ne pouvez pas l'utiliser comme vous le faites (comme en java, en fait).


    Utilisez plutôt IF ... ELSIF ... ELSE ... END IF; :
    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
     
    if mois = j  AND  anne=ANNE then ==>>>>>ERREUR ICI<<<<<<<
            janvier_:=personel_r.bg;
    elsif mois = f  AND  anne=ANNE then
            février_:=personel_r.bg;
    elsif mois = mr     AND  anne=ANNE then
            mars_:=personel_r.bg;
    elsif mois = av    AND  anne=ANNE then
            avril_:=personel_r.bg;
    elsif mois = ma     AND  anne=ANNE then
            mais_:=personel_r.bg;
    elsif mois = ju     AND  anne=ANNE then
            juin_:=personel_r.bg;
    elsif mois = jui  AND  anne=ANNE then
            juillet_:=personel_r.bg;
    elsif mois = au   AND  anne=ANNE then
            août_:=personel_r.bg;  
    elsif mois = sep AND  anne=ANNE-1 then
            septembre_:=personel_r.bg;
    elsif mois = oct   AND  anne=ANNE-1 then
            octobre_:=personel_r.bg;
    elsif mois = nov AND  anne=ANNE-1 then
            novembre_:= personel_r.bg;
    else    decembre_:=personel_r.bg;
    end if;

    Cdlt,
    OD

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Il n y a plus d'erreur avec les if
    merci

  5. #5
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Dans votre code, le CASE est fait sur la variable mois qui est de type NUMBER. Il faut donc que l'expression derrière le WHEN retourne un NUMBER. Or on a
    qui :
    - doit retourner un boolean
    - s'attend à ce que la variable j soit de type boolean pour pouvoir faire le AND.

    Donc les IF...ELSIF vont bien, ou alors quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CASE
      WHEN mois = j AND anne = ANNE THEN ...
      ...

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    En PL/SQL il y en a deux type d'instruction CASE.

Discussions similaires

  1. ORA-06553: PLS-382: expression du mauvais type
    Par Goupo dans le forum PL/SQL
    Réponses: 4
    Dernier message: 12/02/2009, 10h26
  2. erreur PLS-00382 xpath.valueof
    Par sol-elodie dans le forum SQL
    Réponses: 4
    Dernier message: 12/11/2007, 22h05
  3. Erreur PLS 00103
    Par claralavraie dans le forum Oracle
    Réponses: 4
    Dernier message: 05/01/2006, 17h44
  4. fonction LAG et erreur PLS-00103. Oracle 8i
    Par henrirobert dans le forum Oracle
    Réponses: 7
    Dernier message: 26/05/2005, 16h03
  5. Arguments wrong type lorsque update db
    Par NeHuS dans le forum ASP
    Réponses: 9
    Dernier message: 22/04/2005, 11h33

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