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 :

sql dans un RPG


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 108
    Par défaut sql dans un RPG
    Bonjour,

    Je voudrais faire une requête que je "fabrique" moi même, car je rajoute des zones selon les cas.
    Je ne veux pas du dynamique mais construire ma requête pour l'exécuter ensuite.
    J'ai don voulu essayer avec un call QCMDEXC, mais j'ai un message ou il ne trouve pas la commande.
    Que dois je faire? Merci d'avance.

    Vola le code
    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
    * Execution OS400                                     
    
    E CDE 1 11 30 E TC 110 1 * IPCDE DS I 1 110 TC * .... C CALL 'QCMDEXC' C PARM PCDE C PARM LNG C SETON LR * ** CDE INSERT INTO AATPCR/AFS SELECT ORG,AMTPER01, AMTPER02, FROM AFS0 WHERE ORG ='

    Je forme ma requête via un tableau puis qui alimente la zone PCDE
    La requête au finale est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PCDE = INSERT INTO AATPCR/AFS  SELECT ORG,AMTPER01, AMTPER02, AMTPER01+ AMTPER02  (zone variable)
    FROM AFS0 WHERE ORG =' SOC' (zone variable)
    Ma table AFS est définie comme cela
    Zone données zone tampon tampon zone
    ORG ALPHA 6 6 1 E/S
    AMTPER01 CONDEN 18 2 10 7 E/S
    AMTPER02 CONDEN 18 2 10 17 E/S
    SEL0004 CONDEN 19 2 10 27 E/S

    Quand je réalise le CALL 'QCMDEXC', j'ai ce message:

    ID message . . . . . . : CPD0030 Gravité . . . . . . . : 30
    Type de message . . . : Diagnostic
    Date d'envoi . . . . . : 18/03/15 Heure d'envoi . . . . : 13:32:42

    Message . . . . : Commande INSERT non trouvée dans la bibliothèque *LIBL.
    Cause . . . . . : Si aucune bibliothèque n'est indiquée, la commande n'a pas
    été trouvée dans les bibliothèques de la liste. Si une bibliothèque a été
    indiquée, la commande n'a pas été trouvée. L'une des valeurs spéciales
    suivantes a peut-être été utilisée pour indiquer la bibliothèque :
    *LIBL - La commande n'a été trouvée dans aucune des bibliothèque de la
    liste.
    *NLVLIBL - La commande n'a été trouvée dans aucune bibliothèque de langue de
    la liste des bibliothèques système.
    *SYSTEM - La commande n'a pas été trouvée dans la bibliothèque QSYS.
    Que faire . . . : Modifiez le nom de commande ou de bibliothèque, puis
    relancez la commande.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 648
    Billets dans le blog
    10
    Par défaut
    J'ai bien l'impression qu'il s'agit quand même de réinventer du sql dynamique
    Si le contenu de la requête peut varier en fonction des paramètres du traitement, alors c'est du dynamique.

    Auquel cas
    - il faut appliquer stricto sensu les règles et la syntaxe propres au SQL dynamique
    - il faut accepter les inconvénients dus au SQL dynamique et notamment, la difficulté accrue des études d'impact,
    les performances moins bonnes (bind au moment de l'execute) et variables selon les paramètres communiqués

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 108
    Par défaut en dynamique
    C'est ce que j'ai fait, voir ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    C move *blank orga 6 C Eval orga = 'ABBGR' C move *blank pdata 25 C Eval pdata = 'AMTPER01+AMTPER02' /FREE exec sql INSERT INTO AATPCR/AFS SELECT ORG,AMTPER01, AMTPER02, :pdata FROM AFS0 WHERE ORG = :orga and :pdata <> 0; /end-FREE C sqlcod ifeq 100 C endif C Eval *inlr = *on

    Mais j'ai une erreur sql -302 et sqlstate 22023. J'ai l'impression qu'il ne prend pas ma variable :pdata?
    ci-dessous le message

    Impossible d'extraire le fichier d'options de requête.
    Message de débogage de début **** de l'optimiseur pour la requête .
    Zone HVR0003 et valeur 3 incompatibles. Code raison : 7 (7 -- La valeur contient des données numériques incorrectes. ).
    Erreur de conversion sur variable hôte ou paramètre PDATA.
    SQLCOD = -000000302.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 648
    Billets dans le blog
    10
    Par défaut
    Attention aussi : nombreux sont les sites de production qui n'aiment pas, voire qui interdisent le SQL dynamique, à bien vérifier avant d'aller plus loin

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 108
    Par défaut
    Si je demande c'est que je peux le faire ;-)

  6. #6
    Membre éclairé
    Homme Profil pro
    Expertise IBM i. Formation, Audit, Conseil, Sécurité
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Expertise IBM i. Formation, Audit, Conseil, Sécurité

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Par défaut
    Bonjour,

    Plusieurs remarques :
    1- on n'exécute pas du SQL avec un CALL QCMDEXC. Ce programme est un interpréteur qui permet de lancer une commande du langage de contrôle. Autrement dit elle lance une commande du CL. INSERT n'est pas une commande CL mais SQL, donc le système te répond qu'il ne la connaît pas. C'est normal. Si tu tiens absolument à utiliser le QCMDEXC, tu peux appeler la commande RUNSQL suivi de ton INSERT en paramètre. Attention, il te faut être en V7R1
    2- tu n'es pas obligé de faire du SQL dynamique pour ta requête. Il te faut juste utiliser les variables du programme dans ta requête, pour cela il te faut préfixer leur nom par un ":". C'est ce que tu as fait dans ton second exemple
    3- l'erreur SQLCODE = -302 signifie que tu essayes de mettre dans la zone HVR0003 quelque chose qui n'est pas compatible (un nombre trop grand par exemple).

    Dominique

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

Discussions similaires

  1. problème optimisation sql dans RPG ILE
    Par Pierre Quefer dans le forum AS/400
    Réponses: 4
    Dernier message: 19/02/2009, 13h09
  2. Utilisation SQL dans un programme RPG
    Par R4ndy dans le forum AS/400
    Réponses: 29
    Dernier message: 15/09/2008, 00h59
  3. SQL ou QRY dans un RPG
    Par Arrnno dans le forum AS/400
    Réponses: 1
    Dernier message: 26/03/2008, 12h01
  4. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58
  5. [PL/SQL] Utilisation table PL/SQL dans clause IN
    Par Yorglaa dans le forum PL/SQL
    Réponses: 13
    Dernier message: 05/10/2004, 10h36

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