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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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 : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    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 confirmé
    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
    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.

  3. #3
    Membre éclairé 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 : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    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 Expert 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
    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

  5. #5
    Membre éclairé 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 : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    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