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 :

Appel de fonction


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 469
    Points : 167
    Points
    167
    Par défaut Appel de fonction
    Salut à tous,

    j'ai une question bête mais qui m'interpelle.
    J'ai réalisé une fonction qui retourne un type que j'ai créé dans ma base.
    Cette fonction réalise des select dans des tables et me retourne mon type.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select maFonction.var1,maFonction.var2  from dual;
    Combien de fois est appelée maFonction ?

    Vaut il mieux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select montype.var1, montype.var1 
    from (select maFonction from dual) montype
    Merci pour vos réponses et vos éclaircissements.

    De plus si je veux mettre ma fonction dans un package et déclarer mon type à l'intérieur est ce possible ?

    Merci beaucoup
    ----------------------------------
    La façon la plus efficace de combattre un système qui ne nous convient plus
    n'est pas de lutter contre lui mais de s'en désintéresser et de ne plus l'alimenter...

    ----------------------------------

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Bonjour.

    Quel est le type que vous avez créé? Vos deux écritures n'ont rien à voir et vous ne pouvez utiliser l'une ou l'autre aléatoirement.

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 469
    Points : 167
    Points
    167
    Par défaut
    Le voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TYPE    MONTYPE AS OBJECT
    (
      LOGIN VARCHAR2(255),
      FILTER CLOB,
      PROFIL VARCHAR2(255)
      );
    /
    et mon appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select 
    MAFONCTION('lenoil').LOGIN as LOGIN,
    MAFONCTION('lenoil').FILTER as FILTER,
    MAFONCTION('lenoil').PROFIL as PROFIL
    from dual
    ----------------------------------
    La façon la plus efficace de combattre un système qui ne nous convient plus
    n'est pas de lutter contre lui mais de s'en désintéresser et de ne plus l'alimenter...

    ----------------------------------

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Je pense que votre fonction sera appelée autant de fois qu'elle apparaît dans la requête. La seconde syntaxe me paraît correcte. L'avez-vous essayée?

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 469
    Points : 167
    Points
    167
    Par défaut
    oui mais cela ne fonctionne pas ......

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT RETOUR.login
    FROM (SELECT MAFONCTION('lenoil') FROM dual) RETOUR

    J'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00904: "RETOUR"."LOGIN" : identificateur non valide
    je sais pas comment procéder .....
    ----------------------------------
    La façon la plus efficace de combattre un système qui ne nous convient plus
    n'est pas de lutter contre lui mais de s'en désintéresser et de ne plus l'alimenter...

    ----------------------------------

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    C'est logique que cela ne fonctionne pas car votre select interne (SELECT MAFONCTION('lenoil') FROM dual) ne renvoie pas une table mais un objet, or la clause from ne permet que de manipuler des objets de type tables (ou vues, requêtes, etc).

    Vous pouvez néanmoins utiliser un type table stocké pour manipuler votre objet et ainsi ne faire qu'un seul appel à votre fonction.

    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE TYPE  MONTYPETABLE AS TABLE OF MONTYPE;
    puis le select ad'hoc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT LOGIN, FILTER, PROFIL
    FROM TABLE(MONTYPETABLE(MAFONCTION('lenoil')));

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 469
    Points : 167
    Points
    167
    Par défaut
    OK je vais essayer ...

    Et puis je créer mes types à l'intérieur de mon package ?
    ----------------------------------
    La façon la plus efficace de combattre un système qui ne nous convient plus
    n'est pas de lutter contre lui mais de s'en désintéresser et de ne plus l'alimenter...

    ----------------------------------

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

Discussions similaires

  1. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  2. Réponses: 4
    Dernier message: 19/04/2004, 13h41
  3. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 13h44
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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