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

AS/400 Discussion :

SQLRPG - SQL Dynamique


Sujet :

AS/400

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2022
    Messages : 1
    Points : 1
    Points
    1
    Par défaut SQLRPG - SQL Dynamique
    Bonjour,

    Je reprends le développement après un arrêt de quelques années. (près de 15 ans )
    Je passe du RPGIII / RPGIV au Free RPG avec SQL
    Globalement çà va.
    Mais là, je tombe sur un beau sujet.
    Et pas facile à expliquer...


    J'ai une requête SQL à construire dans le programme mais à partir de valeurs récupérées dans un fichier.
    Et je bloque lorsqu'il s'agit d'une variable appartenant au programme.

    ex : J'ai 3 valeurs récupérées dans le fichier, que je dois concaténer pour faire ma requête SQL.
    Valeur 1 : 'TST'
    Valeur 2 : ' ' (espace)
    Valeur 3 : SUBSTR(: DTAMVT, 3, 6)

    DTAMVT est une variable déclarée dans le programme. (le ':' me sert à récupérer avec %scan la position du nom de la variable).

    On aura à la fin quelque chose comme ceci :
    Select 'TST' concat ' ' concat substr(DTAMVT, 3, 6) from sysibm/sysdummy1

    par exemple on a en valeur: DTAMVT = '20220330_TEST'
    Le résultat final devrait donner : 'TST 220330'
    Car en réalité la requête est (après interprétation) : Select 'TST' concat ' ' concat substr('20220330_TEST', 3, 6) from sysibm/sysdummy1


    Pour récupérer les valeurs 1 et 2, ok, ce sont des constantes.

    Cela se corse sur la récupération du contenu de la valeur de la donnée DTAMVT.
    Le programme ne récupère pas la valeur de DTAMVT mais considère DTAMVT en tant que chaine de caractère.

    Déroulement en gros du programme (je laisse de côté les val1 et val2 pour alléger):

    Dans le code :
    Variables déclarées:
    DTAMVT
    wDATA
    wVALDATA
    wREQUETE



    Init variable :
    wDTAMVT = '20220330_TEST';



    J'ai alors une 1ère requête qui récupère les constantes et variables à utiliser.
    Select val3 into :wDATA from fichier_param

    => Ici, je détermine qu'il faut utiliser "DTAMVT" en variable.



    Je souhaite ensuite faire une requête pour récupérer la valeur de DTAMVT à partir de wDATA
    Je prépare donc une requête :

    wREQUETE = 'Select ' + wDATA + 'From sysibm/sysdummy1';
    => wREQUETE contient alors : "Select DTAMVT From sysibm/sysdummy1"

    Et les instructions suivantes :
    Exec SQL Declare cCLD1 cursor for cSQL1;
    Exec SQL Prepare cSQL1 from :wREQUETE;
    Exec SQL Open cCLD1 using :wDATA;
    Exec SQL fetch cCLD1 Into :wVALDATA;


    Mais j'ai une erreur m'indiquant que DTAMVT n'est pas déclarée. : Colonne ou variable globale DTAMVT est introuvable.

    Je comprends l'erreur => DTAMVT devrait plutôt être déclarée comme pour la 1ère requête :
    wREQUETE = 'Select ' + DTAMVT + ' From sysibm/sysdummy1'; ,
    mais je ne vois pas comment faire puisque le programme ramène DTAMVT en tant que chaine de caractère ('DTAMVT') et non de variable.


    Si vous aviez une astuce...
    Ou alors je me plante quelque part.

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 691
    Points : 996
    Points
    996
    Par défaut
    Bonjour,

    Alors là je dirais ... ouh là ! Que nous fais-tu ?
    C'est un joli Gloubli Boulga que je vois là.

    Essaye de poser plus simplement le problème car j'ai l'impression de comprendre et en relisant je me dis que finalement ce n'est pas çà.
    Présente nous les fichiers avec leurs champs (simplifie s'il y en a beaucoup en omettant les champs non importants)
    Puis explique nous comment ils sont reliés, et ce que tu veux obtenir en lecture.

    Je pense que la solution est simple, et que tu as tout compliqué, mais tant que je n'aurai pas tout compris, on va éviter de se prononcer.

Discussions similaires

  1. Prob SQL dynamique
    Par anthony8 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/09/2004, 09h53
  2. Appel de function en SQL Dynamique
    Par dkd dans le forum Oracle
    Réponses: 22
    Dernier message: 28/09/2004, 18h01
  3. SQL dynamique : pb de syntaxe
    Par Pasiphae dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/08/2004, 16h50
  4. SQL dynamique
    Par Etienne1 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/08/2004, 10h18
  5. SQL Dynamique - Materialized view
    Par Simeans2004 dans le forum SQL
    Réponses: 15
    Dernier message: 10/06/2004, 17h56

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