Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > z/OS
z/OS Forum d'entraide sur z/OS et MVS (Multiple Virtual Storage), les systèmes d'exploitation des ordinateurs « mainframes » IBM : JCL, Tso, Ispf, Vsam, Racf, SMS, Cics, Ims, OPC, Ca-7, Control-M, Dialog Manager ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/08/2007, 09h41   #1
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
Par défaut Insert SQL par JCL

Encore bonjour, décidemment, j'ai pas mal de questions !!!

Je cherche à réaliser un INSERT SQL via un Step de JCL. J'ai utilisé l'utiltaire IKEFT01 mais il n'est pas installé ...

Avez vous une solution à ce problème ? (autre que IKEFT01), j'utilise par exemple DSNUTILB pour les load, peut on s'en servir pour les INSERT et UPDATE ?

Petite précision, en fait ce que je voudrais faire c'est insérer un enregistrement dans une table s'il n'existe pas, sinon, je voudrais le mettre à jour ... mais je ne vois pas trop comment coder ca en JCL (faire un select puis en fonction du code retour faire un insert ou update ?)

Merci à vous.
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 11h30   #2
Membre confirmé
 
Avatar de SPACHFR
 
Inscription : février 2004
Messages : 502
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 502
Points : 243
Points : 243
T'es sur que c'est pas plutôt cet utilitaire : IKJEFT01
SPACHFR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 11h31   #3
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
Sous MVS via JCL : de la même manière que tu utilises l'utilitaire LOAD par DSNUTILB pour faire tes chargements, tu peux utiliser l'utilitaire EXEC SQL.

Il se code de la sorte en SYSIN :


Code jcl :
1
2
3
4
5
6
7
8
 
 EXEC SQL 
     INSERT INTO toto 
         VALUES (...
                ,...
                ,...
                ,...) 
ENDEXEC

Attention cet utilitaire est utilisable uniquement avec ALTER, COMMIT, CREATE, DELETE, DROP, EXPLAIN, GRANT, INSERT.

.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 11h36   #4
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
En y réfléchissant un peu, bof bof comme utilisation!

Que veux tu faire exactement, dans quel contexte ? Peut-être vaut-il mieux passer ta requête par programme ou bien via SPUFI ?

.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 11h44   #5
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
Pour utiliser certains batch de mon JCL, je dois inserer ou mettre à jour une ligne DB2 dans une table afin d'autoriser mon user et le nom de mon job à se lancer.

C'est pourquoi avant de lancer le step de mon batch, je dois vérifier et mettre à jour (ou ajouter) cette fameuse ligne ...

Je préfère donc automatiser car le JCL est parametrable pour pouvoir le changer d'environnement à volonté (et donc de table DB2 !)

En revanche, pour ton premier poste qui stipule que je peux utiliser celui du LOAD, les fichiers SYSREC00 et SYSPUNCH sont-ils utiles ?
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 13h05   #6
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
Il te suffit de ne conserver que la SYSPRINT pour vérifier le code SQL de ta requête dans ton compte rendu et la SYSIN elle même, soit:

Code jcl :
1
2
3
4
5
6
7
8
9
10
11
12
 
//STEP1    EXEC PGM=DSNUTILB,PARM='SSID,userID'
//SYSPRINT DD SYSOUT=*                          
//SYSIN    DD *
 EXEC SQL 
     INSERT INTO toto 
         VALUES (...
                ,...
                ,...
                ,...) 
 ENDEXEC
/*

Les données contenu dans le paramètre PARM varient selon les normes du site.

.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 14h08   #7
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
C'est OK merci beaucoup !!

@+
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 09h36   #8
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
Petite précision,

Comment réaliser certaines requete de manière conditionnelle
, c'est à dire :
Code :
1
2
3
4
5
6
7
8
9
10
SELECT * FROM ....

SI SQL CODE à 100 : 
   
   ALORS 
      INSERT INTO 
   
   SINON 
      UPDATE FROM ....
Merci !!
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 21h06   #9
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 098
Points : 1 707
Points : 1 707
Citation:
Envoyé par Antichoc Voir le message
... Comment réaliser certaines requete de manière conditionnelle ...
Euh ... un programme peut-être ?
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 09h49   #10
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
Merci mais c'est justement ce que je veux éviter ... Y a t il moyen de la coder en JCL ?
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 10h28   #11
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
Comme Luc... par programme.

.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 10h30   #12
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
Tampi, merci à vous !
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2007, 21h12   #13
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 098
Points : 1 707
Points : 1 707
Allez ! ... la communauté des "mainframers" de DVP, peu nombreuse certes mais néanmoins vaillante, ne va pas rester sur un échec !

Voici la solution que je propose :
  1. faire un déchargement, via DSNTIAUL par exemple, pour avoir le résultat de la requête dans un fichier
  2. tester si le fichier est vide via la fonction COUNT de l'utilitaire ICETOOL en générant un RETURN CODE
  3. tester le RETURN CODE via JCL pour faire l'un ou l'autre cas

Concrètement ça donne quelque chose comme ça :
Code :
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
//DSNTIAUL EXEC PGM=IKJEFT01,DYNAMNBR=20 
//* DSNTIAUL AVEC ORDRE SQL 
//SYSTSPRT DD SYSOUT=* 
//SYSPRINT DD SYSOUT=* 
//SYSTSIN DD * 
 DSN SYSTEM(DSN) 
 RUN PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) PARMS('SQL') 
//SYSREC00 DD DISP=(NEW,PASS),DSN=&&TEMP, 
//  AVGREC=U,SPACE=(80,(100,10)) 
//SYSPUNCH DD DUMMY 
//SYSIN DD * 
  SELECT * FROM SYSIBM.SYSDUMMY1 
  WHERE IBMREQD='A'; 
//* 
//ICETOOL EXEC PGM=ICETOOL 
//TOOLMSG DD SYSOUT=* 
//DFSMSG DD SYSOUT=* 
//TOOLIN DD * 
 COUNT FROM(IN) RC4 EMPTY 
//IN DD DISP=(OLD,PASS),DSN=&&TEMP 
//* 
// IF RC=4 THEN 
//IEFBR14 EXEC PGM=IEFBR14 
// ELSE 
//IEFBR14 EXEC PGM=IEFBR14 
// ENDIF
Dans mon exemple, le RETURN CODE généré vaut 4 si le fichier est vide, c'est à dire si la ligne n'existe pas ...
Les activités exécutées sont ici fictives mais c'est juste pour tester ...
Bien sûr il faut adapter ...

Alors qui dit mieux ?
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 09h29   #14
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
Superbe dans la forme, dans le fond je pense que ce genre de cas ne se gère pas par JCL
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 09h32   #15
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
Impréssionné ....

Bon je vais tester et je vous tiens au courant
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 17h30   #16
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
Il semblerait que ICETOOL fonctionne pour diriger vers le step de mon choix (INSERT ou UPDATE) seulement, dans ces step, les requetes ne se font pas correctement, j'ai un abend -805 ...

Je ne sais pas d'où cela peut venir !
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//DSNTIAUL EXEC PGM=IKJEFT01,DYNAMNBR=20 
//* DSNTIAUL AVEC ORDRE SQL 
//SYSTSPRT DD SYSOUT=* 
//SYSPRINT DD SYSOUT=* 
//SYSTSIN DD * 
DSN SYSTEM(DSN) 
RUN PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) PARMS('SQL') 
//SYSREC00 DD DISP=(NEW,PASS),DSN=&&TEMP, 
//  AVGREC=U,SPACE=(80,(100,10)) 
//SYSPUNCH DD DUMMY 
//SYSIN DD * 
  SELECT * FROM MA TABLE
  WHERE MA SELECTION;
//*
Ca c'est ok
Code :
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
//ICETOOL EXEC PGM=ICETOOL 
//TOOLMSG DD SYSOUT=* 
//DFSMSG DD SYSOUT=* 
//TOOLIN DD * 
COUNT FROM(IN) RC4 EMPTY 
//IN DD DISP=(OLD,PASS),DSN=&&TEMP 
//* 
// IF RC=4 THEN 
//INSERT EXEC PGM=DSNUTILB,PARM='DSN,USER'
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 EXEC SQL
  INSERT INTO ....
 ENDEXEC
/*
// ELSE 
//UPDATE EXEC PGM=DSNUTILB,PARM='DSN,USER'
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 EXEC SQL
  UPDATE TABLE SET ...
 ENDEXEC
/*
// ENDIF
Qu'il rentre dans l'insert ou l'update, j'ai un MaxCC=8 avec uin sqlcode à -805. Le icetool et le select se sont bien déroulé !!

Merci
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 20h21   #17
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 098
Points : 1 707
Points : 1 707
Citation:
Envoyé par Peut-êtreUneRéponse Voir le message
Superbe dans la forme, dans le fond je pense que ce genre de cas ne se gère pas par JCL
... je suis d'accord ... ça tient plus de l'exercice de style qu'autre chose ... mais bon ...


Citation:
Envoyé par Antichoc Voir le message
Il semblerait que ICETOOL fonctionne pour diriger vers le step de mon choix (INSERT ou UPDATE) seulement, dans ces step, les requetes ne se font pas correctement, j'ai un abend -805 ...
c'est d'autant plus curieux que ça a déjà fonctionné non ?


Citation:
Envoyé par Antichoc Voir le message
... Ca c'est ok
j'espere que tu as codé ta propre requête quand même ...


Citation:
Envoyé par Antichoc Voir le message
Qu'il rentre dans l'insert ou l'update, j'ai un MaxCC=8 avec uin sqlcode à -805. Le icetool et le select se sont bien déroulé !!
... sinon on peut toujours passer par un DSNTEP2 ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 22h45   #18
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
Je cherche de la doc sur DSNTEP2 ... je vous tiens au courant

Citation:
Envoyé par Antichoc
... Ca c'est ok
j'espere que tu as codé ta propre requête quand même ...
Le message est rectifié mais j'avais effectivement codé ma requete ... les DSN et table n'étant pas les même, cela aurait été difficile !!
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2007, 22h51   #19
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 098
Points : 1 707
Points : 1 707
Citation:
Envoyé par Antichoc Voir le message
Je cherche de la doc sur DSNTEP2
DSNTEP2 est un programme exemple fourni par IBM ("sample" en terminologie IBM) qui permet d'exécuter quasiment tout le SQL DB2 de manière dynamique.

Il est particulièrement utile en batch où il est utilisé à partir de l'interface TSO-Batch (le fameux IKJEFT01 i.e. le Terminal Monitor Program).

C'est un programme écrit en PL/1 qui peut même être modifié par un programmeur connaissant ce langage.

Voici un exemple de JCL (à adapter selon le site bien sûr ...) :
Code :
1
2
3
4
5
6
7
8
9
//DSNTEP2 EXEC PGM=IKJEFT01,DYNAMNBR=20 
//SYSTSPRT DD SYSOUT=* 
//SYSPRINT DD SYSOUT=* 
//SYSTSIN DD * 
 DSN SYSTEM(DSN) 
 RUN PROGRAM(DSNTEP2) PLAN(DSNTEP2) 
//SYSIN DD * 
 SELECT * FROM SYSIBM.SYSDUMMY1;
DSNTEP2 a un équivalent écrit en assembleur pour les sites qui n'auraient pas le compilateur PL/1 c'est DSNTIAD. Mais ce dernier a des restrictions que n'a pas DSNTEP2 (pas de SELECT notamment).

Pour la doc ( DB2 V7 ) c'est ici :
Running DSNTEP2
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2007, 10h04   #20
Membre régulier
 
Inscription : janvier 2003
Messages : 255
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 255
Points : 92
Points : 92
Envoyer un message via ICQ à Antichoc Envoyer un message via MSN à Antichoc
Désolé pour le retard, je rentre de congés :-)

Ca semble me convenir, merci pour ces infos.
__________________
« Ne me faites pas d'objections.
Les difficultés en feront assez d'elles-mêmes. »

sir Winston Churchill
Antichoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h54.


 
 
 
 
Partenaires

Hébergement Web