Les nouveaux types de variables de la base de donnée OS/400 1/ valeur nulle admise (dans l'enregistrement 1 bit par zone, 1 = ALWNULL) - SQL : sans préciser not null - SDD = ALWNULL - traitement SQL: mot-clé NULL RPG: CRTRPGPGM ALWNULL(*YES) si une zone a la valeur indéfinie le compilateur la remplace par une valeur par défaut. on ne peut pas donner la valeur indéfinie en sortie CRTRPGPGM ALWNULL(*NO) si une zone a la valeur indéfinie ==> erreur E/S autres langages: non supporté !!! |
Les nouveaux types de variables de la base de donnée OS/400 2/ longueur variable (chaque zone est précédée de 2 octets binaires indiquant la longueur) - SQL : VARCHAR(X) ALLOCATE(y) - SDD = lg=lg maxi (ici X) VARLEN(y) - traitement SQL: pas de remarque RPG: CRTRPGPGM CVTOPT(*VARCHAR) le compilateur génère une zone alpha (lg-maxi + 2) ==> prévoir une DS pour le traitement. ==> renseigner la longueur en sortie. CBL: CRTCBLPGM CVTOPT(*VARCHAR) le compilateur génère une zone de groupe 01 ADRESSE 49 ADRESSE-LENGTH PIC S9(4) comp-4. 49 ADRESSE-DATA PIC X(xxx). ==> mêmes remarques que RPG en sortie |
Les nouveaux types de variables de la base de donnée OS/400 3/ date et heure - SQL : DATE, TIME, TIMESTAMP (CURRENT DATE, CURRENT TIME, ... valides) - SDD = type de donnée L -> date mots-clés DATFMT() et DATSEP() T -> heure mots-clés TIMFMT() et TIMSEP() Z -> horodatage (pas de mot-clé) - traitement SQL: calculs autorisés RPG: CRTRPGPGM CVTOPT(*DATETIME) le compilateur génère une zone alpha. doit contenir uen valeur correcte en sortie, pas de traitement particuliers possibles avant V3R10. CBL: CRTCBLPGM CVTOPT(*DATETIME) idem RPG. |
Tous ces nouveaux types ne sont reconnus par SDD que pour les fichiers physiques (par pour les DSPF, hélas !) Il faut donc prévoir des zones alphas, lg fonction du type. DFU reconnait ces nouveautés. OPNQRYF aussi (y compris fonctions intégrées pour les dates) 1/en comparaison avec une variable de même type 'DATCHG > DATCRT' avec une constante (charactère) 'DATCHG > "01/01/94" ' attention, respecter le format et les séparateurs. 2/en calcul avec des fonctions intégrées de durée %DURYEAR( ) %DURMONTH( ) %DURDAY( ) %DURHOUR( ) %DURMINUTE( ) %DURSEC %DURMICSEC( ) |
avec une durée numérique date = décimale 8,0 sous forme yyyymmdd (nombre d'années-mois-jours) (le résultat d'une opération date-date est sous ce format) heure= décimale 6,0 sous forme hhmmss (nombre d'heures-minutes-s) (le résultat d'une opération heure-heure est sous ce format) horodatage= décimale (20,6) sous forme yyyymmddhhmmssccccc (le résultat d'une opération timestamp-timestamp est sous ce format) 3/ avec des opérations + et - . + : Ajout d'une durée (incrémentation) DATE + 215 (date + 2 mois et 15 jours) DATE + %DURMONTH(2) + %DURDAY(15) (idem) si l'on ajoute une durée en mois (%DURMONTH) le jour reste inchangé sauf s'il est plus grand que le dernier jour du mois auquel cas il est remplacé par le dernier jour du mois. %DATE('30/01/1994') + %DURMONTH(1) devient 28/02/94 |
Modifier une partie de date affecte les éléments dépendants Ajouter un nombre de jours peut modifier le mois et l'année Ajouter un nombre de mois peut modifier l'année - : différence entre .... DATE1 - DATE2 (résultat sous forme de durée) %DATE('15/3/2000') - %DATE('31/12/1999') = 215 (2 mois et 15 jours) : retrait d'une durée (décrémentation) DATE - 215 (date - 2 mois et 15 jours) mêmes remarques que pour l'incrémentation |
Pour une variable de type horodatage la modification de l'heure(+ ou -) peut entrainer la modification de la date. la modification des microsecondes peut entrainer une modification de l'heure. OPNQRYF/Fonctions associées: %CURDATE, %CURTIME, %CURTIMESTP sans argument, donnent date/heure en cours QRYLST('DATCRT = %CURDATE') %DATE, %TIME, %TIMESTP renvoient date/heure de l'argument l'argument peut être une variable horodatage pour %DATE, %TIME une constante caractère (attention au format) une variable caractère QRYSLT('%DATE(DAT8) = %CURDATE) ou %DATE(VHORO) = "12/12/94" .... |
%DAY, %MONTH, %YEAR, %HOUR, %MIN, %SECOND, %MICSEC renvoient une PARTIE de l'argument (Binaire 4) Même remarque pour l'argument PLUS LA NOTION DE DUREE. QRYSLT('%MONTH(DATE1) = 12) ou %MONTH(DATE1 - DATE2) > 1 %CHAR(date/heure format) renvoie date ou heure sous format caractère QRYLST('%CHAR(DATE1 "EUR") = "28/02/94") %DAYS( ) renvoie une date sous format numérique (Binaire 4) %MIN et %MAX acceptent les variables de type DATE, HEURE, HORODATAGE A noter : la fonction %NULL est admise en comparaison avec une variable: VAR1 = %NULL la fonction %USER retourne le profil en cours sous forme lg variable 18 c. le paramètre MAPFLD admet tous les nouveaux types de variables |
exemple de fichier utilisant ces nouveautés. * fichier PFV2R11 A R FORMAT TEXT('FORMAT PF V2R11') A NULLOK 20 ALWNULL A VARLEN 128 VARLEN(50) A VDATE L DATFMT(*DMY) DATSEP('/') A VTIME T TIMFMT(*HMS) TIMSEP(':') A VHORO Z |
GESTION DE DONNEES D'UN FICHIER Mode . . . . : SAISIE Format . . . . : FORMAT Fichier . . : PFV2R11 ######## ######### NULLOK: VARLEN: VDATE: 01/01/40 VTIME: 00:00:00 VHORO: 0001-01-01-00.00.00.000000 F3=Exit F5=Réafficher F6=Sélection format F9=Insertion F10=Saisie F11=Modification Des zones acceptant les valeurs indéfinies ont été trouvées. # |
Entrée d'instructions SQL Saisissez l'instruction SQL, puis appuyez sur Entrée. ===> INSERT INTO AF4TOOL/PFV2R11 Fin F14=Supprimer ligne F15=Scinder ligne F16=Choisir bibliothèques F17=Choisir fichiers F18=Choisir zones F24=Autres touches # |
Définition d'une instruction INSERT Indiquez vos choix, puis appuyez sur ENTREE. INTO fichier . . . . . . . . . . PFV2R11 Nom, F4 pour liste Bibliothèque . . . . . . . . . AF4TOOL Nom, F4 pour liste Choix de zones pour insertion INTO . . . . . . . . . . . . . O O=Oui, N=Non Méthode d'insertion . . . . . . . 1 1=VALUES en entrée 2=Sous-sélection F3=Exit F4=Invite F5=Réafficher F12=Annuler F21=Instruction |
Définition d'une instruction INSERT Entrez les numéros de séquence (1-999) correspondant à vos choix, puis ENTREE. Valeurs Séq Zone Type Chiffres Long indéfinies 10 NULLOK CHARACTER 20 NULL 20 VARLEN VARCHAR 128 NOT NULL WITH DEFAULT 30 VDATE DATE NOT NULL WITH DEFAULT 40 VTIME TIME NOT NULL WITH DEFAULT 50 VHORO TIMESTAMP NOT NULL WITH DEFAULT Fin F3=Exit F5=Réafficher F12=Annuler F21=Afficher instruction |
Définition d'une instruction INSERT Indiquez les valeurs à insérer, puis appuyez sur ENTREE. Zone Valeur NULLOK 'renseignée par SQL' VARLEN 'renseignée par SQL' VDATE '31/12/93' VTIME '11:59:59' VHORO current timestamp Fin F3=Exit F5=Réafficher F6=Insérer ligne F10=Copier ligne F11=Type F12=Annuler F14=Supprimer ligne F15=Scinder ligne F24=Autres touches |
Entrée d'instructions SQL Saisissez l'instruction SQL, puis appuyez sur Entrée. > INSERT INTO AF4TOOL/PFV2R11(NULLOK, VARLEN, VDATE, VTIME, VHORO) VALUES ('renseigné par SQL', 'renseigné par SQL', '31/12/93', '11:59:59', current timestamp) 1 lignes ont été insérées dans la table PFV2R11 de la base de donnée ===> INSERT INTO AF4TOOL/PFV2R11(NULLOK, VARLEN, VDATE, VTIME, VHORO) VALUES (null, 'renseignée par SQL,variable précédente non renseignée ', '31/12/93', '11:59:59', current timestamp) Fin F14=Supprimer ligne F15=Scinder ligne F16=Choisir bibliothèques F17=Choisir fichiers F18=Choisir zones F24=Autres touches # |
Entrée d'instructions SQL Saisissez l'instruction SQL, puis appuyez sur Entrée. > INSERT INTO AF4TOOL/PFV2R11(NULLOK, VARLEN, VDATE, VTIME, VHORO) VALUES ('renseigné par SQL', 'renseigné par SQL', '31/12/93', '11:59:59', current timestamp) 1 lignes ont été insérées dans la table PFV2R11 de la base de donnée > INSERT INTO AF4TOOL/PFV2R11(NULLOK, VARLEN, VDATE, VTIME, VHORO) VALUES (null, 'renseignée par SQL,variable précédente non renseignée ', '31/12/93', '11:59:59', current timestamp) 1 lignes ont été insérées dans la table PFV2R11 de la base de donnée ===> select * from af4tool/pfv2r11 Fin F14=Supprimer ligne F15=Scinder ligne F16=Choisir bibliothèques F17=Choisir fichiers F18=Choisir zones F24=Autres touches # |
Affichage des données Première ligne à afficher . . ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+.... NULLOK VARLEN renseignée 20 caractères saisis - la variable ALWNULL n'a pas été renseignée,les zones DAT renseignée par SQL renseignée par SQL - renseignée par SQL,variable précédente non renseignée ******** Fin de données ******** |
Membre de fichier physique Fichier . . . . : PFV2R11 Bibliothèque . . : AF4TOOL Membre . . . . . : PFV2R11 Enregistrement . : 1 Contrôle . . . . . Colonne . . . . : 1 Recherche . . . . *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+.... renseignée 20 caractères saisis Ĝla variable ALWNULL n'a pas été renseignée,les zones DAT renseignée par SQL renseignée par SQL renseignée par SQL,variable précédente non renseignée ****** FIN DES DONNEES ****** .... |