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 :

PLS 00307 En instanciant un objet


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 136
    Par défaut PLS 00307 En instanciant un objet
    J'utilise oracle 11G et la version 11.2.0.2.0 de pl/sql. Je suis plutôt un debutant sous oracle et sql en general. Le code suivant

    Code pl/sql : 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
     
    create or replace type chapeau
    as object
    (
    	id_donnee       varchar2(255),
    	valeur_anormale varchar2(255),
    	pourcentage     number,
    	constructor function chapeau(idt varchar2, valeur varchar2, compte number) return self as result
    )
     
    create or replace type body chapeau as
     
    	constructor function chapeau(idt, valeur, compte) return self as result as
    	begin
    		self.id_donnee       := idt;
    		self.valeur_anormale := valeur;
    		self.pourcentage     := 400;
    		return;
    	end;
    end;
     
    declare
    r chapeau := new chapeau('titi', 'toto ', 23);
    begin
    dbms_output.put_line(r.pourcentage);
    end;

    me renvoie l'erreur

    Code log : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    l.2, col.18
    PLS 00307 : trop de declarations de chapeau correspondent à cet appel
    l.2, col.3
    Item ignored
    l.4, col.22
    PLS00320 :declaration de type de cette expression imcomplete ou mal structurée
    l.4, col.1
    Statement ingnored

    J'avais justement fait attention à appeler mon objet chapeau pour être sûr de ne pas avoir de conflit.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut Deux constructeurs
    Bonjour,

    Quand tu crées un type il a par défaut un constructeur qui accepte ses attributs comme paramètre.

    Dans ton cas tu n'as pas besoin de déclarer un constructeur explicitement.

    Tu peux déclarer un autre constructeur qui accepte d'autres paramètres.
    C'est un surcharge qui est gérée.
    Je pense que si tu déclares ton propre constructeur avec les même paramètres Oracle ne sait pas lequel choisir quand tu invoques l'objet : Celui par défaut ou le tien. D'où le message : Quel chapeau je prends ?

    Si tu n'a pas d'autres méthodes vire le type body ton code fonctionne.
    Accessoirement ton type body ne compilait pas car tu n'a pas typé les paramètres de la fonction chapeau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    constructor FUNCTION chapeau(idt, valeur, compte) RETURN self AS result AS
    Aurait dû être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    constructor FUNCTION chapeau(idt Varchar2, valeur Varchar2, compte Number) RETURN self AS result AS
    Mais de toute façon tu dois dropper cette routine.

    Pozzo

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 136
    Par défaut
    Mais ici j'ai besoin de réécrire un constructeur avec 3 paramètres puisque mes attributs sont fonctions de ces paramètres et non pas égaux (pour le dernier attribut en tout cas).

  4. #4
    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
    Votre constructeur est redondant mais si vous y tenez vraiment à l’appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> declare
      2    r           chapeau := new chapeau(idt =>'titi', valeur=>'toto ', compte=>23);
      3  begin
      4    dbms_output.put_line(r.pourcentage);
      5  end;
      6  /
     
    400
    PL/SQL procedure successfully completed

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 136
    Par défaut
    Ici j'ai besoin de la donnée "compte" parce que c'est un parametre externe à partir duquel on va calculer le pourcentage

Discussions similaires

  1. [Reflection] Instancier un objet
    Par bl@st dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 28/10/2008, 11h09
  2. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  3. Réponses: 4
    Dernier message: 08/03/2006, 19h07
  4. Réponses: 6
    Dernier message: 18/01/2006, 16h26
  5. instancier un objet Excel
    Par RobinNono dans le forum ASP
    Réponses: 1
    Dernier message: 13/12/2005, 15h51

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