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 :

[PL/SQL] Fonction retournant un tableau


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Points : 29
    Points
    29
    Par défaut [PL/SQL] Fonction retournant un tableau
    Bjr,
    J'ai le code suivant:
    CREATE OR REPLACE PACKAGE pk IS
    TYPE TYP_tParam is table of varchar2(100) INDEX BY BINARY_INTEGER;
    FUNCTION fct(
    nb IN NUMBER
    ) RETURN TYP_tParam;
    END pk;
    /
    CREATE OR REPLACE PACKAGE BODY pk IS
    FUNCTION fct
    (
    nb IN NUMBER
    ) RETURN TYP_tParam
    IS
    tParam TYP_tParam;
    BEGIN

    tparam(0) := nb;
    return tparam;
    END;
    /
    Quand je l'exécute il crée le package sans erreur.
    Mais à l'appel j'ai le code suivant :
    CREATE OR REPLACE PROCEDURE appel IS
    TYPE TYP_tParam2 is table of varchar2(100) INDEX BY BINARY_INTEGER;
    tParam2 TYP_tParam2;
    var NUMBER;
    BEGIN
    tParam2 := pk.fct (10);
    var := tParam2 (0);

    END;
    /
    et l'erreur suivante:
    PLS-00382: expression is of wrong type

    je ne vois pas quel est le pb quelqu'un a t'il une idée.
    Je pense qu'un fonction peut bien retourner un tableau.

    merci d'avance.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    le type n'est connu que dans le package. Si ta procédure n'est pas dans le package ça ne marche pas.

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    3 erreurs :
    1. Tu charges un number dans un tableau de varchar2 (il doit s'en sortir avec une conversion implicite, mais ce n'est pas propre)

    2. Tu charges un varchar2 dans un number (il doit s'en sortir avec une conversion implicite, mais ce n'est pas propre)

    3. Et c'est là à mon avis ton erreur, tu charges un type TYP_tParam dans un type TYP_tParam2 et comme ce sont des types utilisateurs il ne sait pas faire de conversion implicite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE PROCEDURE appel IS
    tParam2 pk.TYP_tParam;
    var NUMBER;
    BEGIN
    tParam2 := pk.fct (10);
    var := tParam2 (0);
     
    END;
    /

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Un type déclaré dans la spec. d'un package est utilisable en dehors du package s'il est correctement référencé:


    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
    SQL> create or replace package tt
      2  is
      3  type ttt is table of varchar2(100) index by binary_integer;
      4  end;
      5  /
     
    Package created.
     
    SQL> declare vtt tt.ttt;
      2  begin
      3  null;
      4  end;
      5  /
     
    PL/SQL procedure successfully completed.
     
    SQL>

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    en effet... mais en l'occurence, il n'est pas préfixé

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    j'ai mis
    tParam2 pk.TYP_tParam;
    au lieu de refaire une déclaration et çà marche.
    sinon pour les types mon package n'est pas réellement çà
    j'ai voulu reproduire un truc simplifié pour expliquer mon pb et j'ai pas fait gaffe aux types.

    mais bon çà marche

    GRAND MERCI.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    sinon, tu crées le type dans la base

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 24/05/2006, 19h19
  2. Fonction retournant un tableau initialisé
    Par ero-sennin dans le forum Delphi
    Réponses: 6
    Dernier message: 13/05/2006, 16h05
  3. [TP] Fonction retournant un tableau
    Par molesqualeux dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 07/05/2006, 01h01
  4. PB avec fonction retournant un tableau
    Par T-B dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2006, 22h01
  5. fonction retournant un tableau
    Par Jero13 dans le forum C
    Réponses: 7
    Dernier message: 22/11/2005, 11h14

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