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

SQL Oracle Discussion :

probleme utilisation object


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 92
    Par défaut probleme utilisation object
    bonjour j'ai un objet dans oracle dans le quel
    j'aimerais bien utiliser un fonction interne dans une autre fonction
    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
     
    TYPE OBJ{
    VAR1
    VAR2
    MEMBER FONCTION1,
    MEMBER FONCTION2
    }
     
    TYPE BODY{
    MEMBER FONCTION1
    END
     
    MEMBER FONCTION2
    SELF.FONCTION1
    END;
    }
    et j'ai cette erreur
    PLS-00363: expression 'SELF' ne peut être utilisée comme cible
    J'espère avoir été clair

    A+

  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
    Là ou vous n'êtes pas clair du tout c'est sur la version des outils utilisés.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 92
    Par défaut
    mon probleme est dans le cadre d'une utilisation des objets PL-SQL sur
    une base 9i voir supérieur

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    CREATE OR REPLACE TYPE OBJ$BIB AS OBJECT (
      utilisateur VARCHAR2(30),
      langue      VARCHAR2(4),
      programme   VARCHAR2(20),
     
    /****************************************************
      Construction de l'objet
      recoit :  - Nom utilisateur
                - Langue
                - Programme 
      Renvoit : - L'object
    ****************************************************/
      CONSTRUCTOR FUNCTION OBJ$BIB(p_utilisateur IN VARCHAR2,p_langue IN VARCHAR2,
        p_programme IN VARCHAR2) RETURN SELF AS RESULT,
     
    /****************************************************
      Recupération d'un parametre de type alphanumerique 
      recoit :  - Famille
                - numero
      Renvoit : - Valeur du parametre
    ****************************************************/
      MEMBER FUNCTION RECUP_PARAMETRE_A(p_famille IN VARCHAR2,p_num IN NUMBER) 
        RETURN VARCHAR2, 
     
    /****************************************************
      Edition d'une ligne dans la table log
      recoit :  - Niveau du message
                - Message
                - Centrage par defaut à gauche
      Renvoit : - rien
    ****************************************************/
      MEMBER PROCEDURE EDITION_MESSAGE_LOG(p_niveau IN NUMBER,
        p_message IN VARCHAR2,p_centrage IN VARCHAR2:='G')
    );
    /
     
    show error;
     
    CREATE OR REPLACE TYPE BODY OBJ$BIB AS
    /****************************************************/
      CONSTRUCTOR FUNCTION  OBJ$BIB(p_utilisateur IN VARCHAR2,p_langue IN VARCHAR2,
        p_programme IN VARCHAR2) RETURN SELF AS RESULT
      AS
      BEGIN
        /* Initialisation des variables de l'objet */
        SELF.utilisateur:=p_utilisateur;
        SELF.langue:=p_langue;
        SELF.programme:=p_programme;
     
        /* Initialisation du fichier log */    
        DELETE FROM LOG_PROG 
          WHERE UTILISATEUR=p_utilisateur AND PROGRAMME=p_programme;
     
        RETURN;
      END;
     
    /****************************************************/
      MEMBER FUNCTION RECUP_PARAMETRE_A(p_famille IN VARCHAR2,p_num IN NUMBER) 
        RETURN VARCHAR2 
      IS 
        l_retour VARCHAR2(250);
      BEGIN
        SELECT P_CHAR 
        INTO l_retour
        FROM A_PARAM
        WHERE FAMILLE=p_famille
          AND NUM=p_num;
        RETURN l_retour;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN 
          SELF.EDITION_MESSAGE_LOG(1,'PARAMETRE ALPHANUMERIQUE '||p_num||
            ' DE LA FAMILLE '||p_famille||' INEXISTANT. REMPLACER PAR NULL');
          RETURN NULL;
        WHEN OTHERS THEN 
          SELF.EDITION_MESSAGE_LOG(1,'ERREUR RECUPERATION PARAMETRE '||p_num||
            ' DE LA FAMILLE '||p_famille||':'||SQLCODE||';'||SQLERRM);
          RETURN NULL;
      END RECUP_PARAMETRE_A;
     
    /****************************************************/
      MEMBER PROCEDURE EDITION_MESSAGE_LOG(p_niveau IN NUMBER,
        p_message IN VARCHAR2,p_centrage IN VARCHAR2:='G')  
      IS
        l_indice NUMBER:=1;
        l_message VARCHAR2(1100):=NULL;
      BEGIN
        SELECT NVL(MAX(NVL(ORDRE,0))+1,1) 
        INTO l_indice 
        FROM LOG 
        WHERE UTILISATEUR=SELF.utilisateur 
          AND PROGRAMME=SELF.programme;
     
        SELECT DECODE(p_niveau,1,'[MSG DBG] ','')||SUBSTR(p_message,1,1000) 
        INTO l_message 
        FROM DUAL;
     
        INSERT INTO LOG_PROG(UTILISATEUR,PROGRAMME,ORDRE,MESSAGE,NIVEAU,CENTRAGE)
        VALUES(SELF.utilisateur,SELF.programme,l_indice,l_message,
          p_niveau,p_centrage);
      END EDITION_MESSAGE_LOG;
    END;
    voila le code exact et j'ai l'erreur sur SELF.EDITION_MESSAGE_LOG
    dans la fonction RECUP_PARAMETRE_A

    Merci d'avance

  4. #4
    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
    Voici un exemple qui fonctionne sur une base XE:

    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
    25
    26
    27
    create or replace type Test1 as object
    (
      quantity  NUMBER(5),
      MEMBER FUNCTION  F1 Return pls_integer,
      MEMBER PROCEDURE P1( PC$Texte IN Varchar2),
      MEMBER FUNCTION  F2 Return pls_integer
    )
    /
     
    create or replace type body Test1 as
      MEMBER FUNCTION  F1 Return pls_integer
      IS
      Begin
        return SELF.quantity ;
      End ;
      MEMBER PROCEDURE P1( PC$Texte IN Varchar2)
      Is
      Begin
        dbms_output.put_line('Text='||PC$Texte);
      End;
      MEMBER FUNCTION  F2 Return pls_integer
      IS
      Begin
        return SELF.F1 ;
      End ;  
    End;
    /
    appel PL/SQL
    ------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Declare
      obj   Test1 := new Test1(10) ;
      nbr   pls_integer ;
    Begin
      nbr := obj.F2();
      dbms_output.put_line('quantity='||nbr);
      obj.P1('Hello') ;
    End ;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 92
    Par défaut
    Dans ce cas il l'utilise en retour
    moi je veux juste l'utiliser en interne
    comme ceci par exemple
    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
    CREATE OR REPLACE type Test1 AS object
    (
      quantity  NUMBER(5),
      MEMBER PROCEDURE  F1 ,
      MEMBER PROCEDURE P1( PC$Texte IN Varchar2),
      MEMBER FUNCTION  F2 RETURN pls_integer
    )
    /
     
    CREATE OR REPLACE type body Test1 AS
      MEMBER PROCEDURE  F1 
      IS
      Begin
        SELF.quantity:=SELF.quantity+5 ;
      End ;
      MEMBER PROCEDURE P1( PC$Texte IN Varchar2)
      IS
      Begin
        dbms_output.put_line('Text='||PC$Texte);
      End;
      MEMBER FUNCTION  F2 RETURN pls_integer
      IS
      Begin
        SELF.F1;
        RETURN 5;
      End ;  
    End;
    Je sais c'est pas très logique dans ce cas

    mais c'est plus ou moins ce cas de figure

    Et la il me fait la meme erreur

Discussions similaires

  1. [DLL]Probleme utilisation DLL
    Par bubulle63 dans le forum Windows
    Réponses: 4
    Dernier message: 07/09/2006, 13h35
  2. probleme utilisation fonction split
    Par Lnmex dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/07/2006, 16h40
  3. probleme utilisation de iis
    Par seb833434 dans le forum IIS
    Réponses: 2
    Dernier message: 15/06/2006, 17h19
  4. Probleme utilisation d'Objets managé grace a gcroot
    Par pepefourras dans le forum MFC
    Réponses: 4
    Dernier message: 16/05/2006, 00h26
  5. [Conversion]Probleme castexception object --> Integer
    Par lthomas dans le forum Général Java
    Réponses: 10
    Dernier message: 18/04/2005, 14h20

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