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 :

faire une fonction ou proc stockée qui prend table.* en paramètre


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut faire une fonction ou proc stockée qui prend table.* en paramètre
    Bonjour,

    je souhaiterais écrire une fonction qui puisse être utilisée comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select ma_fonction(table1.*) 
    from table1, table2 
    where table1.champ1=table2.champ1
    ...
    Ma problématique c’est de faire une fonction qui calcule une valeur à partir de 11 champs de la table, ce qui constitue la quasi-totalité des champs, je voudrais passer en paramètre un record complet sur la table en fait.
    Et savoir comment écrire une telle fonction.

    Ou sinon trouver n'importe quelle solution élégante pour n'avoir à écrire qu'une seule fois mon gros case compliqué et pouvoir l'utiliser dans d'autres requetes de façon sexy.

    J'espère avoir été suffisamment clair pour ce premier post.
    Merci.

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Pas de solution,mais peut être un bout de réponse
    Bonjour,
    Est ce que tu as eu une réponse à ta question ?
    si oui je suis intéressé par la réponse, j'ai fait le même soucis.

    J'ai crée une fonction qui accepte un enregistrement comme argument avec le mot clef %rowtype

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create or replace function MaFonction ( p_enreg matable%rowtype ) 
    return VARCHAR2
     IS
     v_chaine VARCHAR2(30);
     begin
      v_chaine := p_enreg.Champ1 ;
     return v_chaine ;
     end
     ;
     /

    par contre je n'ai réussi trouver le mot clef a utiliser lors de l'appel pour passer l'enregistrement

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     select MaFonction (t.??? )
     from MaTable t
     where id = 1
    ;

    Merci pour votre aide
    PhilOfF

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par guibe Voir le message
    J'espère avoir été suffisamment clair pour ce premier post.Merci.
    Pas vraiment non...
    Si ça se trouve, une simple vue construite avec le fameux CASE suffit ?
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  4. #4
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Pomalaix :
    Oui sans doute qu'une vue est une bonne idée.
    Une solution propre à mon problème serait d'ajouter une colonne en fait, calculée à partir de toutes les autres et mise à jour dans le trigger d'insert ou d'update, mais les hmmMMmm... gens avec qui je travaille ne le veulent pas.

    PhilOfF :
    j'ai lu ailleurs que ce n'est pas possible d'écrire des choses de ce style. tu peux utiliser des records que tu passes en paramètre mais tu dois remplir les champs. donc difficile d'avoir un gain réel en élégance d'écriture. si tu veux utiliser ce genre de choses il faut tout de suite faire des curseurs.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/01/2009, 11h49
  2. Réponses: 4
    Dernier message: 08/08/2007, 17h36
  3. Réponses: 2
    Dernier message: 12/06/2006, 12h35
  4. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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