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 :

ORA-06553: PLS-382: expression du mauvais type


Sujet :

PL/SQL Oracle

  1. #1
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut ORA-06553: PLS-382: expression du mauvais type
    Salut à tous,

    J'ai une erreur, mon paramètre semble être refoulé. Malgré un petit temps consacré à rechercher sur cette erreur je n'ai rien trouvé qui m'indique sur mon problème... Soit dit en passant : J'utilise Oracle SQL developper.

    Mon appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select adhesionAJour(2) from dual;
    2 est bien susceptible de rentrer dans un number, non?

    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
    create or replace
    function adhesionAJour (numAdh number) 
    return boolean as
    begin
      /*Si la date de fin est inférieure à la date d'aujourd'hui*/
      if (finValidite(numAdh) < sysdate()) then
          /*La date de fin d'adhésion est passée*/
          return false;
        else 
          /*La date de fin d'adhésion n'est pas passée*/
          return true;
      end if;
    end;
    La fonction finValidite(number) est crée, testée et elle fonctionne correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create or replace function finValidite(numeroMembre in number) 
    return date is 
    dateFin date;
    begin
      select add_months(adhesion, 12) into dateFin from membres where numero = numeroMembre;
      return dateFin;
    end;

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Je pense qu'il s'agit de la valeur booléenne, retournée par la fonction qui n'est pas reconnue par le moteur SQL.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Pourtant la fonction est compilée sans erreur : ADHESIONAJOUR Compiled

    C'est à l'exécution qu'il y a un problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select adhesionAJour(2) from dual;
     
    Error starting at line 1 in command:
    select adhesionAJour(2) from dual
    Error at Command Line:1 Column:7
    Error report:
    SQL Error: ORA-06552: PL/SQL: Statement ignored
    ORA-06553: PLS-382: expression du mauvais type
    06552. 00000 -  "PL/SQL: %s"
    *Cause:    
    *Action:
    De plus, il s'agit d'un exercice d'un cahier de TP et l'en tête de ma fonction est mot pour mot identique.

    Je ne capte pas...

  4. #4
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    Comme de qui a été ecris au dessus ca ne marche pas :

    Cause :
    There is BOOLEAN datatype is supported by PL/SQL and NOT supported by SQL
    So you cannot use this function in a straight select statement.

    voir ici des reponses possibles

    http://pandazen.wordpress.com/2008/0...of-wrong-type/

    http://www.mydatabasesupport.com/for...le-fun-14.html

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  5. #5
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Ah! Je viens de comprendre, je crois.
    Vous voulez dire que select false (ou true) from dual; ne marche pas car le moteur SQL connait pas le type booléen.

    Pour tester ma fonction adhesionAJour il faudrait donc que j'utilise plutôt mon moteur PL/SQL qui, lui, connait les booléens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set serveroutput on
    begin
      if (adhesionAJour(2)) then
        dbms_output.put_line('true');
        else dbms_output.put_line('false');
      end if;
    end;
    Et ça marche!


    Merci, merci!

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

Discussions similaires

  1. Erreur = PLS-00382: expression is of wrong type
    Par saladin04 dans le forum PL/SQL
    Réponses: 7
    Dernier message: 31/08/2010, 10h59
  2. Réponses: 20
    Dernier message: 17/09/2007, 13h28
  3. expression du mauvais type
    Par Ptite_Tigresse dans le forum SQL
    Réponses: 3
    Dernier message: 03/09/2007, 10h13
  4. expression du mauvais type DomNode
    Par robris dans le forum Oracle
    Réponses: 6
    Dernier message: 16/08/2006, 16h13
  5. Champs de mauvais type
    Par sebos63 dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/06/2004, 16h07

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