pause-café
rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 à 4 fois par an : en Bretagne et sur internet.
Pause-café #10
Septembre 1996
DB2/400 en V3R60 Il est possible d'ajouter (ADD), retirer (DROP) ou de modifier (ALTER) une colonne, modifiant ainsi la structure même de la table : ADD ALTER TABLE nom-table-----< ALTER >-COLUMN ---------------> DROP ADD COLUMN = même syntaxe que CREATE TABLE ADD COLUMNS-nom-FOR COLUMN-nom/400---Définition-------> >----------------------------------------------------> !--NOT NULL-------------! !--clause WITH DEFAULT--! >-------------------------------------------------- ! ! !--CONSTRAINT--nom---UNIQUE----------------! !-PRIMARY KEY-----! !-REFERENCE ... --!
!--CASCADE---! DROP COLUMN-----nom de zone----- !------ !--RESTRICT--! CASCADE indique que tous les logiques, toutes les vues toutes les contraintes qui s'appuient sur cette colonne sont supprimées. RESTRICT indique que la colonne n'est pas retirée si un des éléments ci-dessus s'appuie sur cette colonne. ALTER COLUMN -------------------------------------------------> !-SET ---DATA TYPE- type de zone---! ! ! !--NOT NULL---------------! >----DROP ---DEFAULT-----------------------------> ! ! !-NOT NULL--! >----(clause WITH DEFAUT)------------------.
la clause WITH DEFAULT et les valeurs par defaut ont été modifiées WITH DEFAULT-------------------------------------------------------. !--'constante'----! !---NULL----------! !--CURRENT_DATE---! !--CURRENT_TIME---! !CURRENT_TIMESTAMP! CURRENT_DATE, CURRENT_TIME et CURRENT_TIMESTAMP représente l'horloge au moment de l'insertion (écriture) les valeurs par défaut si vous n'indiquez rien sont : blanc pour l'alpha 0 pour le numérique CURRENT_DATE pour une variable date CURRENT_TIME pour une variable heure CURRENT_TIMESTAMP pour une variable horodatage
Pour les programmes réalisant leurs E/S par SQL, cette seule action suffit puisqu'il n'y a pas de buffer : un programme contenant des ordres SQL demande des colonnes (et non un enregistrement), que le système place dans des VARIABLES ! Cela n'empêchera pas les recompilations des programmes d'autres langages et SQL/400 sera compatible avec la norme certains produits micros (comme Visual Basic) utilisent le ALTER TABLE Cela apporte aussi une nouvelle commande OS : CHGPF qui comporte un paramètre SRCFILE qui permet une Recréation ATTENTION : la recopie se fait sur les noms de zone, vous ne pouvez donc pas renommer des zones, mais les modifier, en ajouter et modifier des paramètres comme EDTCDE, COLHDG, ....
Les mots-clés SDD suivants n'affectent pas le "LEVEL CHECK" + TEXT + COLHDG + CHECK + EDTCDE + EDTWRD + REF + REFFLD + COMP, RANGE, VALUES + TRNTBL + REFSHIFT + DFT + CCSID + ALWNULL ET, en règle générale, tout ce qui touche à : - la jonction - la définition du chemin d'accès - les sélections / omissions.
Le système crée un fichier Q_AT00000 qui est en fait la nouvelle structure puis: + il envoie un message s'il y a risque de perte de données [moins de zones ou zone(s) plus petite(s).] + il copie tous les enregistrements avec FMTOPT(*MAP *DROP) + il reporte toutes les relations bases de données - fichiers logiques - intégrités - triggers sur le nouveau fichier, et il supprime l'original. IL EST BIEN SUR CONSEILLE DE FAIRE UNE SAUVEGARDE AVANT ! En Octobre 1996, les conversions numérique vers date posent des problèmes.
Sinon, nous sommes limités aux possibilités de la commande CPYF. tout format numérique <--> tout format numérique (attention avec 0 décimales pour le binaire) numérique étendu --> caractère date/heure <--> étendu (l'élement numérique est attendu 6,0 ou 5,0 la date au format du job) (les dates sont comprises entre 1940 et 2039) date/heure <--> caractère (idem pour le format de la date avec en plus la présence du séparateur obligatoire) timestamp <--> caractère (idem) date <--> date heure <--> heure (changement de format transparent)
Autres paramètres de CHGPF : Comme avec SQL, deux paramètres indiquent ce qu'il faut faire en cas de suppression de zone dans le fichier : DLTDEPLF(*YES/*NO) : suppression des logiques qui s'appuient sur cette zone RMVCST(*REMOVE/*RECTRICT) : retrait des contraintes utilisant cette zone. les paramètres : SRTSEQ, LANGID et CCSID peuvent être modifiés (avec CCSID, SRCFILE doit être renseigné) Le paramètre ACCPTHSIZ est nouveau, il permet d'indiquer la taille maxi de l'index: - *MAX4GB = 4 Go, fichier compatible avec versions précédentes - *MAX1TB = 1 Téra octets !!! Le paramètre UNIT est ignoré en V3R60 (utilisez plutôt les ASP)
SQL : nouvelles fonctions , nouveaux registres CHARACTER_LENGTH = nbr de caractères (zone à lg variable) COALESCE et IFNULL = alias de VALUE(v1, v2), renvoie le premier non null CONCAT( ) = ancienne syntaxe : nom CONCAT prenom maintenant en plus : CONCAT(nom, prenom). CURDATE() = idem au registre CURRENT DATE CURTIME() = " " CURRENT TIME NOW() = " " CURRENT TIMESTAMP DAYOFMONTH(date) = jour dans le mois (idem DAY().) DAYOFWEEK(date) = jour dans la semainde (1=dimanche) DAYOFYEAR(date) = jour (julien) dans l'année. QUARTER(date) = N° du trimestre WEEK(date) = N° de la semaine
POWER(nombre, exposant) élévation à la puissance SUBSTR nouvelle écriture : SUBSTRING(zone FROM début ------------------------) !--FOR longueur--! si longueur n'est pas indiqué, SQL traite jusqu'à fin de zone. LEFT(zone, lg) Extrait les n caractères de gauche. LTRIM( ), RTRIM( ) et TRIM( ) Supprime les espaces à gauche, à droite ou aux deux extrémités. UCASE( ) ou UPPER transformation minuscules/MAJUSCULES
TRANSLATE(chaîne-----------------------------------------------------> ! ! !---TO séquence-------------------------------! ! ! !-- FROM séquence--! >-------------------------------) ! ! !--PADDED WITH-' '--! Exemple: TRANSLATE(var1 TO "0,F" FROM " .$") [' ' devient 0 ] ['.' devient ','] [ $ devient F ] VARCHAR(expression, Lg----------------) ! ! !--CCSID---! Transforme une expression en lg variable avec gestion du CCSID. VARGRAPHIC( ) : idem en DBCS.
Divers DB2/400 : + une nouvelle option pour la commande CPYF MBROPT(*UPDADD) : si vous copiez des fichiers avec index(s), tout enregistrement qui provoquerait une clé en double remplace la clé existante, sinon il y a ajout d'enregistrement (comme avec *ADD). Le message de fin de copie indique le nombre d'enregistrements ajoutés et le nombre d'enregistrements mis à jour. + arrivée du parallélisme avec CHGQRYA DEGREE(*ANY), l'optimiseur de requête peut mettre en oeuvre : parallel pre-fetch : lecture des enregistrements en // (multi-canaux) parallel table/index pre-load : chargement complet en mémoire de la table ou de l'index (toujours en //)
+ une nouvelle fonction pour analyser votre activité Base de données. STRDBMON = démarre le moniteur de base de données, pour un job ou pour tous les jobs de la machine. ENDDBMON = arrêt du moniteur et écriture de l'analyse dans un fichier (base de données) Chaque requête est analysée en détail avec : - liste des fichiers traités - options utilisées (jonction, groupage, ....) - liste des indexs examinés (raison du choix ou du refus) - nombre d'enregistrements traités - consommation CPU, ... (Voir le fichier modèle QAQQDBMN )
RPG-IV ,la Version V3R60 propose une nouvelle manière de gérer les appels. 1/ déclaration préalable du programme appelé et des paramètres ==> un PROTOTYPE 2/ L'appel lui-même en spécif C en FORMAT LIBRE ==> nouveau code opération CALLP. (constantes et expressions admises) ==> ou utilisation sous forme de fonction [ x = f(y), IF f(y) > 0, ...] Cela veut dire : - plus de formalisme - plus de contrôles à la compilation (et au liage) - plus de souplesse à l'utilisation - moins d'erreurs à l'éxécution Cela apporte en plus : - un code opération d'appel universel (CALLP = CALL & CALLB) - le support des fonctions (y compris écrites en C).
Définition d'une procédure : DFINDEMOIS PR 2P 0 D DATEIN D DATFMT(*DMY/) CONST Sont définis : + le nom du programme/de la procédure (nom externe pouvant être différent) + le type d'appel à réaliser EXTPROC(nom) = Appel d'une procédure->CALLB EXTPGM(nom) = Appel d'un programme ->CALL Les appels de programmes et de procédures liées peuvent ainsi se faire avec la même syntaxe. La transformation d'un programme en procédure indépendante, ou bien l'attribution d'un nouveau nom, en seront simplifiés. + le nombre et la nature des paramètres - type et longueur - obligatoire (dft) ou optionnel. + la définition de la valeur de retour pour une fonction
Syntaxe : D nom PR lg!type mots-clés Mots-clés admis : DATFMT, DIM, LIKE, PROCPTR, TIMFMT la longueur, le type et les mots-clés définissent la valeur renvoyée. Définition des paramètres : Spécif D de définition de variable Mots-clés admis : ASCEND, DATFMT, DIM, LIKE, PROCPTR, TIMFMT. Nouveaux mots-clés : CONST Ce paramètre est non-modifiable Cette information doit être indiquée aussi bien dans le prototype que dans le programme utilisateur. Il s'agit d'un contrôle réalisé par le compilateur
VALUE passage d'un paramètre par valeur (et non par adresse) ==> utilisation d'expressions lors de l'appel. NOOPT pas d'optimisation pour cette variable (OPTIMIZE(*FULL).) STATIC cette variable est stockée en mémoire statique: elle est initialisée lors du PREMIER appel, toutes les autres fois elle retrouve sa valeur précédente. les variables globales sont forcément statiques. OPTIONS(*NOPASS *OMIT *VARSIZE) *NOPASS le paramètre est facultatif, *OMIT la valeur *OMIT (pointeur nul) est admise. *VARSIZE paramètre à longueur non définie. - L'API CEEDOD décrit les paramètres reçus. - La nouvelle fonction %PARMS() retourne le nombre de paramètres reçus
RPG-IV admet maintenant plusieurs procédures (au sens ILE) par source. Une procédure ressemble à : - un sous-programme, car : elle est codée dans le même source elle a des temps de réponse proches elle "voit" les fichiers ouverts par le pgm principal - à un programme indépendant : elle occupe un niveau d'invocation (influence sur la gestion des erreurs) elle ne connait que ses propres variables. Ce sont de nouveaux concepts : elle est utilisable (ou non, c'est votre choix) par un autre pgm. elle implémente la notion de fonction.
Définition d'une procédure ou d'une fonction : Deux nouvelles spécifs "P" pour définir le début et la fin de la fonction Des Spécifs D pour définir les variables locales Les spécifs C de traitement, avec sur le code-opération RETURN un facteur 2 qui indique la valeur à retourner (vous pouvez coder plusieurs RETURN), pour les fonctions. Pour une procédure (spécif P) le seul mot-clé est : EXPORT autorise l'utilisation de cette procédure par des modules externes (sinon cette procédure est privée c'est à dire utilisable uniquement dans le même source)
structure générale d'un pgm RPG-IV : H Spécif H générale |contient NOMAIN s'il n'y a pas de pgm principal F Déclaration de fichiers |(ouvertures globales) D variables globales | D proc1 PR | prototype procédure 1 D proc2 PR | prototype procédure 2 I variables des fichiers | (globales) C traitement | programme principal O sorties | sorties du programme principal P proc1 B -| D PI | définition de l'interface D | variables locales C | traitement P E -| P proc2 B -| D PI | 2ème procédure (idem) D | C | P E -|
L'utilisation d'une fonction se fait sous la forme : jour = FindeMois(datecde) ou bien IF FindeMois(datcde) > 30 ..... L'utilisation d'une procédure (ou d'un programme) se fait par : CALLP qui est un ordre en format libre, CALLP procédure (p1 : p2: p3) p1, p2, p3 peuvent être : des variables, des constantes, des expressions, des fonctions . Vous avez les mêmes possibilités que pour EVAL.
V3R60 : Autres nouveautés. en spécif H : NOMAIN indique qu'il n'y a que des procédures Pas de programme pincipal, pas de cycle généré. COPYRIGHT('votre signature') en spécif F : le mot-clé PREFIX a une nouvelle syntaxe possible : PREFIX(chaîne : nbr) nbr = nombre de caractères à remplacer ainsi PREFIX('Z' : 3) remplace ABCQTE par ZQTE. en spécif D : deux nouveaux types de variable I = INTEGER -> Binaire U = UNSIGNED -> B non signé. (de 0 à 65535) en spécif C : le format *CYMD est reconnu en gestion de date (MOVE) nouveaux mots réservés : *START et *END valides avec SETLL
********************************************************************** * * Prototypes des fonctions "date" * * un prototype inutile à été ajouté pour vérifier que le compilateur * est capable d'ignorer les prototypes dont il n'a pas besoin ... * --> c'est le cas . ********************************************************************** DFINDEMOIS PR 2P 0 D DATEIN D DATFMT(*DMY/) CONST DISDATE PR 1 D DATEIN 6 0 CONST DUneDateDMY C '1' DCVTDAT PR D DATFMT(*DMY/) D DATEIN 6 0 CONST DADDNBJ PR 6 0 D DATEIN 6 0 CONST D NBJOUR 3 0 CONST *
* Source des fonctions HNOMAIN COPYRIGHT('AF400 (C) VOLUBIS') /COPY PROTOTYPES,srv.fcdate P Findemois B EXPORT * Définition de l'Interface de procédure (PI) * doit être conforme avec le prototype. D PI 2P 0 D Datein D DATFMT(*DMY/) CONST * variables locales DDATEDS DS D Wdate D DATFMT(*DMY) D Wjour 2S 0 OVERLAY(wdate) D slash1 1 OVERLAY(wdate:3) D Wmois 2S 0 OVERLAY(wdate:4) D slash2 1 OVERLAY(wdate:6) D Wan 2S 0 OVERLAY(wdate:7) * traitement C eval wdate = datein C eval wjour = 1 C ADDDUR 1:*M WDATE C SUBDUR 1:*D WDATE C RETURN Wjour
P Findemois E ***************************************************************** * P ISDATE B EXPORT D PI 1 D Datein 6 0 CONST * traitement C *YMD TEST(D) datein 50 C RETURN not *IN50 P ISDATE E ***************************************************************** * P CVTDAT B EXPORT D PI D DATFMT(*DMY/) D Datein 6 0 CONST * VARIABLE DE TRAVAIL D DATEOUT S D DATFMT(*DMY/) * traitement C *YMD MOVE DATEIN DATEOUT C RETURN DATEOUT P CVTDAT E *****************************************************************
* Exemple de programme utilisant les fonctions * HDATFMT(*DMY/) /COPY PROTOTYPES,SRV.FCDATE DDATE S D DATFMT(*DMY/) INZ(D'15/08/96') DJOUR S 2P 0 * DDATNUM S 6 0 INZ(960920) ** C EVAL JOUR = FINDEMOIS(DATE) * C IF ISDATE(DATNUM) = UnedateDMY C EVAL JOUR = FINDEMOIS(CVTDAT(DATNUM)) C ENDIF * C EVAL *INLR = *ON
Divers V3R60 : Le support du CD-ROM : + c'est une unité de restauration (OPT01) compatible avec RSTLIB, RSTOBJ RSTLICPGM (l'OS est livré sur CD) + c'est une unité optique GO OPTICAL et principalement la commande WRKOPTVOL permettent de voir le contenu du CD (les CD Micros sont traités) + c'est un système de fichier HFS, donc aussi IFS : QOPT manipulable par les APIs HFS et par la commande WRKLNK
OPTICAL Utilitaires optiques AS/400 Système: S44R7480 Choisissez l'une des options suivantes : 1. Gestion des volumes optiques 2. Gestion des répertoires optiques 3. Gestion des fichiers optiques 4. Gestion des bibliothèques optiques 5. Gestion des unités optiques 6. Sauvegarde/rétablissement de données optiques 7. Serveur optique Option ou commande ===> 1 F3=Exit F4=Invite F9=Rappel F12=Annuler (C) COPYRIGHT IBM CORP. 1980, 1995. #
########## Gestion des volumes optiques Système: S44R7480 Unité . . . . . . . . . . . . . *ALL CSI . . . . . . . . . . . . . : *ALL Indiquez vos options, puis appuyez sur ENTREE. 1=Ajouter cartouche 2=Modifier 3=Copier 4=Enlever cartouche 5=Afficher 6=Imprimer 8=Gérer répertoires 10=Initialiser... Type Type Liste Opt Volume Unité volume support autorisation 8 AS400V3R10 OPT01 *PRIMARY *CD-ROM QOPTSEC Fin Paramètres ou commande ===> F3=Exit F4=Invite F5=Réafficher F6=Imprimer liste F9=Rappel F11=Vue 2 F12=Annuler F14=Informations détaillées F24=Autres touches
########## Gestion des répertoires optiques Système: S44R7480 Répertoire . . . . *ALL Volume . . . . . . AS400V3R10 Date . . . . . . . *AVAIL Indiquez vos options, puis appuyez sur ENTREE. 1=Créer 3=Copier 4=Supprimer 5=Afficher 6=Imprimer 8=Gérer fichiers Opt Répertoire Volume Créé le / AS400V3R10 04/11/94 /TECHTIPS AS400V3R10 03/11/94 /UPLOAD AS400V3R10 03/11/94 /TAPES/UAA596 AS400V3R10 03/11/94 /TAPES AS400V3R10 03/11/94 /SHELVES AS400V3R10 03/11/94 A suivre... Paramètres ou commande ===> WRKLNK F3=Exit F4=Invite F5=Réafficher F6=Imprimer liste F9=Rappel F11=Tri par répertoire F12=Annuler F16=Repositionner F24=Autres touches
Gestion des liens d'objet Répertoire . . . . : / Indiquez vos options, puis appuyez sur ENTREE. 3=Copier 4=Enlever 5=Niveau suivant 7=Rebaptiser 8=Afficher les attributs 11=Modifier répertoire en cours... Opt Lien objet Type Attribut Texte home DIR qserver DIR tmp DIR CAWIN95 DIR Formation DIR QDLS DIR QFileSvr.400 DIR QFPNWSSTG DIR QLANSrv DIR A suivre... Paramètres ou commande ===> F3=Exit F4=Invite F5=Réafficher F9=Rappel F12=Annuler F17=A partir de F22=Zone complète F23=Autres options
Gestion des liens d'objet Répertoire . . . . : / Indiquez vos options, puis appuyez sur ENTREE. 3=Copier 4=Enlever 5=Niveau suivant 7=Rebaptiser 8=Afficher les attributs 11=Modifier répertoire en cours... Opt Lien objet Type Attribut Texte QOpenSys DIR 5 QOPT DIR QPWXCGA DIR QPWXCGY DIR QPWXCPC DIR QPWXCRB DIR QPWXCSO DIR QPWXCUM DIR QPWXCWN DIR A suivre... Paramètres ou commande ===> F3=Exit F4=Invite F5=Réafficher F9=Rappel F12=Annuler F17=A partir de F22=Zone complète F23=Autres options
Gestion des liens d'objet Répertoire . . . . : /QOPT Indiquez vos options, puis appuyez sur ENTREE. 3=Copier 4=Enlever 5=Niveau suivant 7=Rebaptiser 8=Afficher les attributs 11=Modifier répertoire en cours... Opt Lien objet Type Attribut Texte 5 AS400V3R10 DDIR Fin Paramètres ou commande ===> F3=Exit F4=Invite F5=Réafficher F9=Rappel F12=Annuler F17=A partir de F22=Zone complète F23=Autres options
Gestion des liens d'objet Répertoire . . . . : /QOPT/AS400V3R10 Indiquez vos options, puis appuyez sur ENTREE. 3=Copier 4=Enlever 5=Niveau suivant 7=Rebaptiser 8=Afficher les attributs 11=Modifier répertoire en cours... Opt Lien objet Type Attribut Texte AD400 DDIR BKMGR400 DDIR BOOKDEMO DDIR BOOKENG.AGR DSTMF BOOKS DDIR CKITLIST.TXT DSTMF ENVY DDIR EZ2INST DDIR GETSTART DDIR A suivre... Paramètres ou commande ===> DSPOPT F3=Exit F4=Invite F5=Réafficher F9=Rappel F12=Annuler F17=A partir de F22=Zone complète F23=Autres options
Afficher un volume optique (DSPOPT) Indiquez vos choix, puis appuyez sur ENTREE. Identificateur volume . . . . . AS400V3R10 Unité optique . . . . . . . . . *ALL Nom, *ALL Type de données . . . . . . . . *VOLATR <-! *VOLATR, *DIRATR, *FILATR... ! ! ! F4 --! Fin F3=Exit F4=Invite F5=Réafficher F12=Annuler F13=Mode d'emploi invite F24=Autres touches
Définition de valeur pour paramètre DATA Indiquez votre choix, puis appuyez sur ENTREE. Type de données . . . . . . . . *diratr *VOLATR *DIRATR *FILATR *SAVRST # F3=Exit F5=Réafficher F12=Annuler F13=Mode d'emploi invite F24=Autres touches
Afficher un volume optique (DSPOPT) Indiquez vos choix, puis appuyez sur ENTREE. Identificateur volume . . . . . > AS400V3R10 Unité optique . . . . . . . . . *ALL Nom, *ALL Type de données . . . . . . . . > *DIRATR *VOLATR, *DIRATR, *FILATR... Chemin . . . . . . . . . . . . . Sortie . . . . . . . . . . . . . * *, *PRINT, *OUTFILE, *USRSPC Fin F3=Exit F4=Invite F5=Réafficher F12=Annuler F13=Mode d'emploi invite F24=Autres touches
Le CD-ROm est aussi utilisable avec la documentation livrée sur CD. (Modifiez alors votre valeur système QBOOKPATH.) Malheureusement les temps de réponse d'INFOSEEKER rendent cette option difficilement acceptable en laissant tout sur le CD-ROM. Il est fortement conseillé de restaurer les étagères et les indexs sur les disques du 400 par la commande : Paramètres ou commande ===> QSYS/RSTSHF SHELF(*ALL) DEV(OPT01) RSTBOOKS(*NO) VOL(SK2T_2839_01) Cette option "consomme" 200 Mo d'espace disque.