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

Cobol Discussion :

En Cobol appel fonction retournant une struture de table (TYPE)


Sujet :

Cobol

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Points : 14
    Points
    14
    Par défaut En Cobol appel fonction retournant une struture de table (TYPE)

    Je ne sais pas si c'est possible à faire en PRO-COBOL.
    Dans un programme cobol, je veux appeler une fonction d'un package Oracle. Cette fonction retourne une structure ayant plusieurs enregistrement. Cette structure de table (PIPELINED) provient de la résultante d'un SQL. La structure de table peut-être utilisé dans un select.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Select 
      T1.No_Anoml_Typ,
      T1.No_Item_Doc_Cib,
      T1.Typ_Corr,
      T1.Cod_Parag_Typ,
      T1.Stat_Anoml_Corr,
      T2.Cod_Catg_Anoml,
      T1.Val_Corr_Defa
     From A2_Auto_Corr T1,
          Table(A2076_Ret0001.taF_VectA2AnomlTyp) T2
    Where T1.Ind_Destr_Log = 'N'
      And T1.No_Anoml_Typ = T2.No_Anoml_Typ
      And T1.No_Item_Doc_Cib = T2.No_Item_Doc_Cib
    Si Oui Comment définir les variables dans le Working Storage et comment faire l'appel dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    exec sql execute
                  begin
                    :dc-oui-non :dc-oui-non-i 
                          := A2125_MONNFONC.stF_IndMonnFonc
                             (:dc-no-decl-soc-inf-cot);                
                  end;
               end-exec.

    Merci

  2. #2
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    J'ai trouvé

    Il faut utiliser une fonction retournant un PIPELINED. En cobol utiliser un FETCH avec un SQL dynamique.

    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
    01 zt-dept-tempr-item.
              05 zt-taF-A2-Item-Val-part-1    pic x(37) value
                 'Select val_calc COL1, val_modif COL2,'.
              05 zt-taF-A2-Item-Val-part-2    pic x(17) value
                 ' no_item_doc COL3'.
              05 zt-taF-A2-Item-Val-part-3    pic x(42) value
                 ' FROM TABLE(A2076_RET0001.taF_A2_Item_Val)'.
              05 zt-taF-A2-Item-Val-part-4    pic x(23) value
                 ' WHERE no_item_doc in ('.
              05 zt-taF-A2-Item-Val-part-5    pic x(49) value
                 ' select t2.no_item_Doc from a2_item_impa_calc t1,'.
              05 zt-taF-A2-Item-Val-part-6    pic x(12) value
                 ' a2_calc t2 '.
              05 zt-taF-A2-Item-Val-part-7    pic x(27) value
                 ' where t1.no_item_doc = 113' .
              05 zt-taF-A2-Item-Val-part-8    pic x(29) value
                 ' and t2.no_calc = t1.no_calc)'.
              05 zt-taF-A2-Item-Val-part-9    pic x(22) value
                 ' AND no_decl_soc = :V1'.
    
    01  dc-taF-A2-Item-Val             pic x(1000).
    
           01  ar-a2-item-val                 occurs 100.
               05  ar-taF-A2-Item-calc        pic x(25).
               05  ar-taF-A2-Item-modif       pic x(25).
               05  ar-taF-A2-Item-no-item-doc pic 9(05).
    
           01  ar-a2-item-val-i               occurs 100.
               05  ar-taF-A2-Item-calc-i               pic s9(04) comp.
               05  ar-taF-A2-Item-modif-i            pic s9(04) comp.
               05  ar-taF-A2-Item-no-item-doc-I  pic s9(04) comp.
    
    
          *--> Préparer et compiler le SELECT pour le curseur.
               move zt-dept-tempr-item        to dc-taF-A2-Item-Val.
    
               exec sql
                    PREPARE ITEM_VAL
                    From :dc-taF-A2-Item-Val
               end-exec.
    
          *--> Déclarer le curseur pour le retour des items
               move "DDECLARE CUR_ITEM_VAL"  to a2112w01-cmd-sql.
               perform                        a2-inscr-cmd-sql.
               exec sql
                    DECLARE CUR_ITEM_VAL CURSOR
                    FOR ITEM_VAL
               end-exec.
    
    
               exec sql
                    fetch CUR_ITEM_VAL
                    into  :ar-a2-item-val  :ar-a2-item-val-i
               end-exec.

  3. #3
    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
    N'y a t'il pas besoin d'ouvrir le curseur dans le langage PRO-COBOL ?
    Ne peut-on pas remplacer la valeur "V1" par un marqueur de paramètre ?

    Ces questions, parce que ce Cobol ressemble puissamment au Cobol et au SQL Mainframe et IBM i que je connais par ailleurs.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Points : 14
    Points
    14
    Par défaut ouvrir et fermer le curseur
    Oui il faut ouvrir et fermer le curseur. Dans l'exemple il n'y a pas été démontré. Mais il faut les utilisé.
    Pour l'autre question "Ne peut-on pas remplacer la valeur "V1" par un marqueur de paramètre ?"
    Je ne connais pas "marqueur de paramètre".

  5. #5
    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
    "marqueur de paramètre" ou "parameter marker". Il s'agit de points d'interrogation qu'on substitue lors du PREPARE ou de l'OPEN par la valeur du paramètre correspondant. Ces valeurs doivent alors être passées dans le même ordre que les ?.

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     05 zt-taF-A2-Item-Val-part-9    pic x(22) value
         ' AND no_decl_soc = ?'.
              .
              .
              .
        exec sql
           OPEN CUR_ITEM_VAL CURSOR
              USING :V1    <--- ici, substitution du ? par la valeur V1
        end-exec.
    Mais je ne sais pas si ça marche en pro-cobol.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Marqueur de paramètre
    Oui le marqueur des paramètres est applicable.

  7. #7
    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
    Dans ce cas, pour raison de performances, il vaut mieux employer le marqueur de paramètre plutôt que de faire du SQL dynamique pur et dur.

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

Discussions similaires

  1. fonction (retourner une valeur)
    Par nymus7 dans le forum Langage
    Réponses: 8
    Dernier message: 03/09/2007, 13h22
  2. Appel fonction d'une classe
    Par totoche dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/02/2007, 15h56
  3. Réponses: 6
    Dernier message: 14/02/2006, 11h29
  4. Pb appel fonction dans une lib
    Par mamok dans le forum MFC
    Réponses: 14
    Dernier message: 01/02/2006, 18h40
  5. fonction retournant une valeur
    Par ryan dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 17h45

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