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

Oracle Discussion :

[PL/SQL] FUNCTION qui renvoie un ensemble :D


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 32
    Points : 24
    Points
    24
    Par défaut [PL/SQL] FUNCTION qui renvoie un ensemble :D
    Oui jsais que c'est un sujet qui est revenu maintes et maintes fois sur le tapis...
    J'ai parcouru tout developpez.com sans trouver une réponse à ma question. Mais si jamais la réponse est qqe part je vous autorise à me foutre des grands coups de latte dans la gueule. Bref...

    2 packages

    package1 :
    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
     
    CREATE OR REPLACE PACKAGE monpackage1 AS
     
         TYPE montype IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
     
         FUNCTION mafonction_pk1 RETURN montype;
     
    END monpackage1;
     
    CREATE OR REPLACE PACKAGE BODY monpackage1 AS 
     
         FUNCTION mafonction_pk1 RETURN montype IS
              monretour montype;
         BEGIN
              monretour(1) := 'moncontenu1';
              monretour(2) := 'moncontenu2';
              monretour(3) := 'moncontenu3';
              RETURN monretour;
         END mafonction_pk1;
     
    END monpackage1;
    package2 :
    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
     
    CREATE OR REPLACE PACKAGE monpackage2 AS
     
         TYPE montype IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
     
         PROCEDURE maprocedure_pk2;
     
    END monpackage2;
     
    CREATE OR REPLACE PACKAGE BODY monpackage2 BODY AS 
     
         PROCEDURE maprocedure_pk2 IS
              mavariable montype;
         BEGIN
              mavariable := monpackage1.mafonction_pk1;
         END mafonction_pk2;
     
    END monpackage2;
    Impossible de compiler le corps de monpackage2

    Je pensais que ça pouvait venir du fait que le moteur prend montype de monpackage1 et montype de monpackage2 pour des types différents mais même en castant avec la formule suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         mavariable := CAST(monpackage1.mafonction_pk1 AS montype);
    ...ça marche po...

    PleeEaaAse ... *Help*

  2. #2
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Après kk corrections dans les noms tout se compile :
    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
     
    SQL> CREATE OR REPLACE PACKAGE monpackage1 AS
      2  
      3       TYPE montype IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
      4  
      5       FUNCTION mafonction_pk1 RETURN monpackage1.montype;
      6  
      7  END monpackage1;
      8  /
     
    Package créé.
     
    SQL> CREATE OR REPLACE PACKAGE BODY monpackage1 AS
      2  
      3       FUNCTION mafonction_pk1 RETURN monpackage1.montype IS
      4            monretour monpackage1.montype;
      5       BEGIN
      6            monretour(1) := 'moncontenu1';
      7            monretour(2) := 'moncontenu2';
      8            monretour(3) := 'moncontenu3';
      9            RETURN monretour;
     10       END mafonction_pk1;
     11  
     12  END monpackage1;
     13  /
     
    Corps de package créé.
    SQL> CREATE OR REPLACE PACKAGE monpackage2 AS
      2  
      3       TYPE montype IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
      4  
      5       PROCEDURE maprocedure_pk2;
      6  
      7  END monpackage2;
      8  /
     
    Package créé.
     
    SQL> CREATE OR REPLACE PACKAGE BODY monpackage2 AS
      2  
      3       PROCEDURE maprocedure_pk2 IS
      4            mavariable monpackage1.montype;
      5       BEGIN
      6            mavariable := monpackage1.mafonction_pk1;
      7       END maprocedure_pk2;
      8  
      9  END monpackage2;
     10  /
     
    Corps de package créé.
     
    SQL>
    Mais pour utiliser un object définit dans un package je te conseille de préfixe le nom de l'object par le nom du package

    mavariable monpackage1.montype; par exemple

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    avec le message d'erreur on arriverait probablement mieux à t'aider... sachant qu'on ne s'occupe pas des problèmes de syntaxe en principe

  4. #4
    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
    Et pour finir, sachez qu'un type défini dans un package n'est pas identique au même type défini dans un autre.

    dans votre package n° 2 définissez votre variable tableau sur le type déclaré dans le package n°1.
    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

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Oki chefs...
    Merci pour votre aide !

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/11/2009, 17h42
  2. Réponses: 3
    Dernier message: 09/01/2009, 23h11
  3. Réponses: 13
    Dernier message: 29/01/2008, 15h28
  4. Requete sql vers ORACLE qui renvoi une erreur
    Par lilou77 dans le forum Oracle
    Réponses: 7
    Dernier message: 29/01/2007, 09h52
  5. function qui renvois un objet ?
    Par mattmat dans le forum ASP
    Réponses: 4
    Dernier message: 23/04/2004, 11h35

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