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

DB2 Discussion :

Est-il possible d'utiliser une fonction utilisateur (UDF) avec un requêteur se connectant à DB2 ?


Sujet :

DB2

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Est-il possible d'utiliser une fonction utilisateur (UDF) avec un requêteur se connectant à DB2 ?
    Bonjour,

    J'aimerai savoir s'il est possible d'utiliser une fonction utilisateur définie dans DB2 (iSeries V5R3) dans un logiciel de requête window (j'utilise QUERY SHOWCASE) et si oui, y a t'il des manipulations à faire ?
    Dans les tests que j'ai pu effectuer, seul les fonctions classiques étaient utilisables (MIN(), MAX(), SUM(), etc...).

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Aucun problème, il faut juste t'assurer qu'il trouvera la fonction dans la *LIBL si tu utilises la convention *SYS ou dans le schéma courant si tu utilises la convention *SQL.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je n'y arrive pas

    - J'ai utilisé dans la requête, une table dans le même shéma que la fonction.
    - J'ai mis la fonction dans une bibliothèque de la QUSRLIBL.
    - J'ai fais une fonction plus simple sans traitement de table -ADD(int1, int2)-.
    - J'ai utilisé la syntaxe iseries et SHOWCASE -ADD(int1; int2)-.

    Et dès que j'essai de créer la colonne qui contient la fonction dans SHOWCASE, j'ai systématiquement :
    L'analyseur a rencontré une erreur de syntaxe au niveau ou à proximité du jeton : (
    Je n'ai plus d'idée...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Le message d'erreur n'est pas clair du tout.

    1) Poste ta fonction
    2) La requête qui appelle qui appelle la fonction

    ps : le séparateur de valeurs à l'appel d'une fonction c'est la virgule

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Voici le script de création de la 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
    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
    CREATE FUNCTION ZAGRALYS/PRIXBASE
         (                           
         DOMAINE  VARCHAR( 3),       
         TARIF    VARCHAR( 5),       
         DEVISE   VARCHAR( 3),       
         SOCIETE  VARCHAR( 3),       
         TIERS    VARCHAR( 9),       
         PRODUIT  VARCHAR(10),       
         DATEAPPLI DECIMAL(8,0)      
         )                           
    RETURNS DECIMAL(13, 4)           
    LANGUAGE SQL                     
    SPECIFIC ZAGRALYS/PRIXBASE       
    NOT DETERMINISTIC                
    READS SQL DATA                   
    CALLED ON NULL INPUT             
    RETURN (                         
         SELECT A.ATRVDE             
         FROM AATARIL2 AS A          
         WHERE A.ATRCDO = DOMAINE    
           AND A.ATRCIN = TARIF      
           AND A.ATRCIN = TARIF         
           AND A.ATRCDE = DEVISE        
           AND A.ATRSOC = SOCIETE       
           AND A.ATRTIE = TIERS         
           AND A.ATRNTA = 'T'           
           AND A.ATRNI1 = 'bbb'         
           AND A.ATRNI2 = 'bbb'         
           AND A.ATRNI3 = 'bbb'         
           AND A.ATRNI4 = 'bbb'         
           AND A.ATRCPO = PRODUIT       
           AND A.ATRGEN = 'bb'          
           AND A.ATRTRA = 'bbbbb'       
           AND A.ATRSAC = 'bbbbb'       
           AND A.ATRZON = '150 blancs'             
           AND A.ATRDDA =               
               (                        
               SELECT MAX (B.ATRDDA)    
               FROM AATARIL2 AS B       
               WHERE B.ATRCDO = A.ATRCDO
                 AND B.ATRCIN = A.ATRCIN
                 AND B.ATRCDE = A.ATRCDE
                 AND B.ATRSOC = A.ATRSOC
                 AND B.ATRTIE = A.ATRTIE
                 AND B.ATRNTA = A.ATRNTA
                 AND B.ATRNTA = A.ATRNTA  
                 AND B.ATRNI1 = A.ATRNI1  
                 AND B.ATRNI2 = A.ATRNI2  
                 AND B.ATRNI3 = A.ATRNI3  
                 AND B.ATRNI4 = A.ATRNI4  
                 AND B.ATRCPO = A.ATRCPO  
                 AND B.ATRGEN = A.ATRGEN  
                 AND B.ATRTRA = A.ATRTRA  
                 AND B.ATRSAC = A.ATRSAC  
                 AND B.ATRDDA <= DATEAPPLI
                 AND B.ATRDAS = 0         
               )                          
           AND A.ATRDAS = 0               
           )                              
    ;
    En SQL interactif sur l'iSeries, le select suivant fonctionne parfaitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT APRCPR, APRLPR, 
    PRIXBASE('APP', 'PAAbb', 'EUR', 'bbb', 'bbbbbbbbb', APRCPR, 20110321) 
    FROM aaprodp
    Alors que sur QUERY SHOWCASE, il me met le message d'erreur
    L'analyseur a rencontré une erreur de syntaxe au niveau ou à proximité du jeton : (
    dès que je veux créer la colonne avec la fonction PRIXBASE (cf copie d'écran jointe).
    Images attachées Images attachées  

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Essaie de passer par des variables en y mettant dedans les valeurs que tu passes en dur à la fonction. Ensuite, mets les variables à la place des valeurs dans le coding de la fonction.

    Résultat sans aucune garantie.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Et non, ça ne marche pas non plus avec les valeurs en variable...
    On a vraiment l'impression que c'est sur PRIXBASE qu'il butte.
    Je n'ai pas l'impression qu'il va vérifier s'il existe une fonction sur l'iSeries : pas de temps de latence, la fenêtre d'erreur de syntaxe est instantanée.

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/07/2008, 16h14
  2. Est-il possible d'utiliser la fonction TOP avec un argument variable ?
    Par 16-Marco dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 06/03/2007, 22h21
  3. Réponses: 6
    Dernier message: 19/10/2006, 15h47
  4. Réponses: 2
    Dernier message: 17/08/2006, 14h50
  5. Est-il possible d'exécuter une fonction à partir de fichier
    Par magic8392 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 16/09/2005, 13h59

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