######################## ## FICHIER PHYSIQUE ## ######################## C'EST LE RESERVOIR DE DONNEES - DESCRIPTION -----> Caractéristiques du Fichier Format ou Longueur d'Enregistrement - CHEMIN D'ACCES ----! !----> Autant que de Membres - DONNEES ----! |
######################## ## FICHIER PHYSIQUE ## ######################## ######################## DESCRIPTION -----------------> ## ## ######################## ## °°°° °°°° ## CHEMIN D'ACCES (index)-------> ## ° ° ° ° ## ## °°°° °°°° ## ######################## ## °°°°°° °°°°°° ## DONNEES (membres)------------> ## ° ° ° ° ## ## °°°°°° °°°°°° ## ######################## |
######################## ## FICHIER PHYSIQUE ## ######################## ######################## DESCRIPTION -----------------> ## ## ######################## ## ## - Attribut de L'Objet. ## ## - Longueur de L'Enregistrement ## ## (sans SDD, on dit fichiers en interne) ######################## OU ## ## Format de L'Enregistrement ## ## (création avec SDD ou fichiers externes) ## ## ######################## |
######################## ## FICHIER PHYSIQUE ## ######################## ######################## ## ## ######################## ## ## CHEMIN D'ACCES --------------> ## ## ## ## - Organisation apparente des Données ######################## ####################################### ## ## - Si le Chemin d'Accès n'est pas Défini ## ## explicitement, le Fichier est : ## ## EN ORDRE D'ARRIVEE.(FIFO) ######################## |
######################## ## FICHIER PHYSIQUE ## ######################## ######################## ## ## ######################## ## ## ## ## ## ## ######################## ## ## DONNEES ---------------------> ## ## ## ## - Devront être amenées dans le membre ######################## après la création: . par programme RPG,SQL,... . par une commande de COPIE (CPYF, ...) . par l'utilitaire D.F.U . ..... |
######################## ## FICHIER PHYSIQUE ## ######################## DESCRIPTION D'UN FICHIER PHYSIQUE La Description du FICHIER PHYSIQUE est créée a partir d'informations fournies: - dans la commande de création CRTPF , comme SIZE(10000) - dans le membre source qui contient les spécifications de données (SDD) - par le système (date création, etc...) |
######################## ## FICHIER PHYSIQUE ## ######################## SPECIFICATIONS DE DESCRIPTIONS DE DONNEES Permettent de: - donner le nom du format (qui sera désormais connu en tant que tel par le système) - décrire le dessin d'enregistrement (en citant dans l'ordre les zones composant le format) - solliciter certaines fonctions par l'intermédiaire de mots clés et de paramètres NB: il n'y a qu'un seul format par FICHIER PHYSIQUE chaque ligne est découpée comme suit : 1 1 223 33333 4 6 7 9 890 45678 5 A..........T.NOM+++++++RLG+++TD+U......FONCTION+++++++++++++++++++++++ |
######################## ## FICHIER PHYSIQUE ## ######################## SPECIFICATIONS DE DESCRIPTIONS DE DONNEES Un source SDD est décomposé en QUATRE niveaux : + Niveau fichier (avant le premier format) définit les mots-clés valables pour l'ensemble du fichier Ex: REF(fichier-répertoire) (col 45) + Niveau format (à partir du nom du format et jusqu'à la première définition de zone) col 17 : R (record) col 19-28 : nom du format col 45 : mots-clés |
######################## ## FICHIER PHYSIQUE ## ######################## SPECIFICATIONS DE DESCRIPTIONS DE DONNEES Un source SDD est décomposé en QUATRE niveaux : + Niveau zone (avant le format suivant ou avant le niveau C.A) col 17 : à blanc col 19-28 : nom de la zone __ col 29 : référence OU | |__ col 30-34 : longueur col 35 : type col 36-37 : nb de décimales |
######################## ## FICHIER PHYSIQUE ## ######################## NATURE ET LONGUEUR DE LA ZONE 1. ZONE ALPHA (nb de décimales à blanc) type de zone A ou BLANC valeur par défaut 2 . ZONE NUMERIQUE (nb de décimales renseigné) - par défaut les zones numériques sont en condensé - la longueur fournie doit être la longueur totale(avec déc.) type de zone P ou BLANC packée (valeur par défaut) S étendue (signée) B binaire 3. DATES/HEURES L date T horaire Z horodatage:date,heure,microsecondes TOUJOURS LONGUEUR LOGIQUE DE LA ZONE, C'EST LA MACHINE QUI CALCULERA LA LONGUEUR DE STOCKAGE |
######################## ## FICHIER PHYSIQUE ## ######################## MOTS-CLE COMPLEMENTAIRES. 1) DOCUMENTATION D'APPLICATION (colonne 45) TEXT('TEXTE DE LA ZONE OU DU FORMAT') COLHDG('ENTET1' 'ENTET2' 'ENTET3') 2) CONTROLES DE SAISIE (colonne 45) COMP(XX val) xx = EQ(=),NE(<>),GT(>),GE(>=),... RANGE(borneinf bornesup) VALUES(val1 val2 val3 ...) CHECK(xx) XX = VN nom valide,M10 = modulo 10,..(contraignant) 3) PRESENTATION DES DONNEES NUMERIQUES EDTCDE(x) un édit-code prédéfini EDTWRD('zzzzzzzz') masque d'édition 4) DATES ET HEURE DATFMT, DATSEP, ... |
EDTCDE ------ |<----- montants négatifs ----->|<- positif -->| +-------------------------------------------------------------------------+ ! Impression ! Impression !! Pas ! Symbole! Symbole ! X Ajout du ! ! des ! montants !! de ! CR ! - ! signe + ! ! points ? ! nuls ? !! signe ! ! à D ! à G ! Y Ajout des ! !--------------------------------------------------!-------! '/' (date) ! ! OUI ! OUI !! 1 ! A ! J ! N ! Z Suppression! ! OUI ! NON !! 2 ! B ! K ! O ! des zeros ! ! NON ! OUI !! 3 ! C ! L ! P ! de gauche, ! ! NON ! NON !! 4 ! D ! M ! Q ! pas de signe ! +-------------------------------------------------------------------------+ DATFMT ! DATSEP ! exemple ------ ! ------ ! ----------- *DMY ! '/', '.', etc .. ! 15/02/98 *YMD ! idem ! 98/02/15 ! ! *ISO ! imposé ! 1998-02-15 *EUR ! par le format ! 15.02.1998 ! ! A suivre. |
######################## ## FICHIER PHYSIQUE ## ######################## SPECIFICATIONS DE DESCRIPTIONS DE DONNEES Dernier niveau (facultatif avec les PF) : + Niveau C.A (en fin de source, dernier niveau) col 17 : K = définition de clé col 19-28 : nom de la zone col 45 : définition complémentaire DESCEND : tri en ordre décroissant |
Exemple : R CLIENTF1 TEXT('FICHIER CLIENT') NOCLI 6 0 TEXT('N° CLIENT') COLHDG('N°' 'du' 'Client') EDTCDE(Z) COMP(GT 0) NOMCLI 30 TEXT('NOM CLIENT') COLHDG('NOM Client') COMP(NE ' ') DEP 2S 0 TEXT('DEPARTEMENT DU CLIENT') COLHDG('DEPT') RANGE(01 98) ... / /// DATCRT L TEXT('Date création') COLHDG('Date' 'Création') DATFMT(*EUR) CACLI 13 2 TEXT('CA ANNUEL') COLHDG('CA' 'Annuel') EDTCDE(L) COMP(GE 0) |
Il est possible d'utiliser la fonction Répertoire pour la définition de votre base de données. L'AS/400 propose de définir toutes les zones manipulées par votre application dans un fichier UNIQUE, auquel vous allez attribuer la fonction "logique" de répertoire (ou dictionnaire de données) Il s'agit d'un fichier traditionnel pour l'AS/400 contenant toutes les définitions de données et dans lequel vous ne placerez JAMAIS de données. Puis à la création de vos fichiers physiques vous nommerez les zones devant composer le format d'enregistrement, sans les définir, en demandant au système de copier la définition se trouvant dans le répertoire. (Faire REFERENCE) A REF(REPERTOIRE) A R FORMAT TEXT('------------------') A ZONE1 R A ZONE2 R A ZONE3 R A ZONE4 R A ZONE5 R |
Cela permet d'avoir une définition unique des données de l'entreprise. définition physique. contrôles de validité. fonctions documentaires. Présentation des données numériques. Toutes ces définitions seront répercutées dans le fichier physique et, plus tard, utilisées par les utilitaires de développement: -QUERY ou QM (liste de fichiers) -DFU (maintenance de fichiers) -RLU (conception d'états) -SDA (conception d'images-écran) Plus grande cohérence, Plus grande productivité. Le répertoire peut être modifié à tout moment,le lien REPERTOIRE<->PF n'existe que pendant la création du fichier. Toute modification du répertoire est IGNOREE par les fichiers physiques. |
VUE D'ENSEMBLE. ________ ------------ DSPF REPERTOIRE <________> ! déf. ! ! déf. ! ---------------> ! formats ! ! unique ! ------------ ------------ ! zones ! ! / / !---- <________> ---! ! ------------ PRTF ___v____ _____v___ ! ---------------- PF1 <________> PF2 <_________> !--------> ! déf. ----/ <<<<<! déf. !>> <<! déf. !>>> ! formats/ << !--------! >> << !---------! >>>> !-------/ << ! données! ><< ! données ! >> >> << <________> >< <_________> >> >>>>>>>>>>>>>>> LF11 __v_____ ____v____ __v_____ ___v_____ <________> LFJx <_________> LF21 <________> LF22 <_________> ! déf. ! ! déf jonc! ! déf. ! ! déf. ! !--------! !---------! !--------! !---------! ! index ! ! index ! ! index ! ! index ! <________> <_________> <________> <_________> Le lien entre répertoire et fichiers (physiques ou unités) est fugace (le temps de la création).Le lien entre PF et LF est bien entendu permanent. |
Quelques commandes associées : - DSPFD = description générale - DSPFFD = liste des champs - DSPPFM = voir le contenu (non formaté) - DSPDBR = relations base de donées (relations PF <-> LF) - STRDFU = utilitaire de maintenance de fichiers & UPDDTA = modifier le contenu DSPDTA = voir le contenu (formaté) - STRQRY = utilitaire de génération de listes & RUNQRY = lister le contenu (écran ou état) |
- CPYF copie de fichiers FROMFILE fichier d'origine *LIBL TOFILE fichier de destination *LIBL FROMMBR *FIRST membre d'origine TOMBR *FIRST " de destination MBROPT *NONE option : *NONE ==> création *ADD Ajout *REPLACE Remplacement CRTFILE *NO création ? divers: FRMRCD/TORCD sélection sur le rang (de a) INCREL sélection sur une colonne FMTOPT conversion *NONE fichiers identiques *DROP des colonnes peuvent disparaitre *MAP copie zone à zone avec conversion et initialisation des nouvelles colonnes |
- CPYTOIMPF/CPYFRMIMPF Exportation/Importation de fichiers TOSTMF/FRMSTMF : coordonnées du fichier IFS (fichier stream) dans lequel exporter(TOSTMF) à importer(FRMSTMF) RCDDLM : caractère de fin de ligne *EOR fin d'enregistrement *CR retour chariot , *LF fin de ligne *CRLF les deux précédents DTAFMT : les données sont-elles délimitées *DLM : oui FLDDLM indique le délimiteur de zones (;) STRDLM indique le délimiteur de chaînes (") *FIXED : non RPLNULLVAL (CPYFRMIMPF) indique de remplacer la val. nulle par le dft. DECPNT,DATFMT,TIMFMT indiquent le format des décimales,dates et heures |
Définition d'une contrainte d'unicité ADDPFCST FILE(client) TYPE(*UNQCST) CST(client_unique) <- nom de la contrainte KEY(nocli) Définition d'une clé primaire ADDPFCST FILE(client) TYPE(*PRIKEY) CST(num_client) <- nom de la contrainte KEY(nocli) Une clé primaire est une forme particulière de contrainte d'unicité. (valeur nulle non autorisée) Il peut y avoir plusieurs contraintes d'unicité (portant sur des zones différentes), il ne peut y avoir qu'une seule clé primaire. |
Intégrité référentielle ADDPFCST FILE(command) TYPE(*REFCST) CST(clicommand) KEY(numcli) <- zone du fichier commande PRNFILE(client) <- fichier parent PRNKEY(nocli) <- clé primaire/fichier client UPDRULE(*NOACTION) DLTRULE(*CASCADE) UPDRULE : *NOACTION contrôle lors du COMMIT (journalisation obligatoire) et après l'appel du trigger *RESTRICT contrôle immédiat (journalisation facultative) DLTRULE : les mêmes + *CASCADE , *SETNULL , *SETDFT Les attributs des clés (primaire et étrangère) doivent être identiques : même définition (type, lg, nombre de décimales) |
Si l'une des deux règles (UPDRULE ou DLTRULE) est différente de *RESTRICT : - vos fichiers DOIVENT être journalisés. s'ils ne le sont pas : - l'intégrité sera établie (ADDPFCST fonctionne). - MAIS toutes vos demandes d'ouverture de fichier seront refusées (erreur d' E/S). ============================================================================ Il y a 4 états possibles: - Etablie/active <-- OK, contrôle en cours - Etablie/desactivée <-- suspendue - Définie/activée <-- (pas de membre) - Définie/désactivée <-- idem, suspendue |
Une contrainte peut être momentanément "suspendue" Et donc, une contrainte établie peut s'avérer fausse Si une contrainte est fausse - soit suite à une restauration - soit suite à une désactivation , puis modifs dans le fichier Elle est notée "Check Pending" (verif en instance) Il faut utiliser la commande WRKPFCST |
WRKPFCST ########################################################################## # Gestion des contraintes de fichier physique # # # # 2=Modifier 4=Enlever 6=Afficher enreg en instance de vérif. # # # # Opt Contrainte Fichier Biblio Type Etat verif/instance # # ARTICK1 ARTICP1 MABIB *PRIKEY # # ARTICC1 ARTICP1 MABIB *REFCST ETA/DES Oui # # ARTICC2 ARTICP1 MABIB *REFCST ETA/ACT Non # # .... # # ==> # # # ########################################################################## 2=CHGPFCST, 4=RMVPFCST, 6=DSPCPCST "Verif : Oui" signifie que le système à détecté au moins un incohérence (visualisable par l'option 6) |
V4R20 : - Check Contraints ou contraintes de domaine : il s'agit d'établir un contrôle sur une zone (doit être > à , <> de .. devant être TOUJOURS vérifié. les contrôles demandés aujourd'hui (CHECK, RANGE, VALUES) ne sont vérifiés que dans un monde transactionnel (gestionnaire écran) les nouvelles contraintes seront vérifiés dans toutes les conditions en cas d'erreur ==> message CPF502F ............................................................ : ADDPFCST FILE(CDEENTP1) TYPE(*CHKCST) CST(DATES_CST) : : CHKCST(DATLIV > DATCDE) : :..........................................................: |
et les contraintes peuvent être gérées par WRKPFCST : ............................................................................ : : : Gestion des contraintes de fichier physique : : : :Indiquez vos options, puis appuyez sur ENTREE. : : 2=Modifier 4=Enlever 6=Afficher enreg en instance de vérif : : : : Vérification: : en : :Opt Contrainte Fichier Biblio Type Etat instance : : QSYS_CDEEN > CDEENTP1 FORMATION0 *CHKCST ETB/DES OUI : : : :..........................................................................: ici le fichier est "établie/désactivée" puisqu'il y a des enregistrements ne correspondant pas à la demande [datliv > datcde] |
l'Option 6 affiche le(les) enregistrement(s) en erreur : .......................................................................... : Affichage du rapport : : Largeur . .: 71 : : Colonne . .: 1 : : Contrôle . . . . : : Ligne ....+....1....+....2....+....3....+....4....+....5....+....6 : : N° N° : : CDE CLIENT DATE CDE DATE LIV : : -------- -------- ---------- ---------- : : 000001 3 1 01.01.1940 01.01.1940 : : ****** * * * F I N D E S D O N N E E S * * * : : : :........................................................................: Après avoir modifié l'enregistrement il faut désactiver, puis réactiver la contrainte, qui devient alors "établie / active". |
Autre notion liée aux fichiers physiques : > les triggers : il s'agit d'associer à une action base de données un programme trois actions B de D sont valides - INSERT UPDATE DELETE et deux moments peuvent leurs être associés - BEFORE AFTER Le programme recoit un buffer contenant des informations systèmes ainsi que les deux versions de l'enregistrement manipulé. il peut ainsi, répercuter l'action (fichier trace, interfacage) signaler une erreur (intégrité) modificer l'enregistrement recu (automatisation, an 2000) la commande est ADDPFTRG |
Enfin, dernier point, vous pouvez créer votre base avec le langage SQL (vous obtiendrez toujours un fichier physique) Saisissez dans un source l'ordre ou les ordres de création. Si vous placez plusieurs ordres dans un source, terminez chacun d'eux par ; il n'y a pas de compilation à proprement parlé, mais interprétation du script par la commande RUNSQLSTM (cette commande accepte tout ordre SQL valide sauf SELECT) Syntaxe de l'ordre CREATE TABLE : |
CREATE TABLE nom !--> (nomcolonne--FOR COLUMN-nom--type(lg)-------------- ! ! >------------------------------------------------- x ! ! ! ! !-Clause WITH DEFAULT--! fois ! ! >---------------------------------------------------) ! ! ! --- !--contrainte liée à une colonne--! >---------------------------------------------------. ! ! !--contrainte liée à plusieurs colonnes--! Exemple : |
CREATE TABLE SQLDB/STGTBL (NUMEROSTAGIAIRE for column NOSTAG DEC(3, 0) not null , NOMSTAGIAIRE for column NOM CHAR(15) not null , PRENOM CHAR(15) not null with default, AGENCE NUMERIC(2, 0) not null REFERENCES FAGENCE, NOTE NUMERIC(4, 2) not null with default, ENTREE DEC(6, 0) ) Explications : Les noms longs sont acceptés (depuis la V3R10) : NUMEROSTAGIAIRE est le nom SQL [30 c pour les colonnes, 128 c pour les objets] NOSTAG est le nom système il sont gérés comme des ALIAS pour les colonnes, pour les tables le nom OS/400 est généré à partir des cinq premiers caractères. Types de variable admis: (l=longueur, d=nbr de décimales) |
+ NUMERIC(l, d) numérique étendu + DECIMAL(l, d) ou DEC(l, d) numérique packé + SMALLINT binaire sur 2 octets + INTEGER binaire sur 4 octets + BIGINT binaire sur 8 octets (V4R50) + CHARACTER(l) ou CHAR(l) alphanumérique + VARCHAR(x) ALLOCATE(y) alphanumérique à lg variable x est la plus grande longueur admise y est la longeur minimum allouée par le système. [DSPFFD et DSPPFM montre la zone de longueur X] + FLOAT et REAL numérique virgule flottante (notation scientifique) |
+ DATE une date + TIME un horaire + TIMESTAMP horodatage (date+heure+microsecondes) + BLOB(n K|M) champ binaire (souvent image) dont la taille peut atteindre 15 Mo + CLOB champ texte (notion de CCSID) dont la taille peut atteindre 15 Mo + (un-type) champ faisant référence à un type créé par l'utilisateur à l'aide de : CREATE DISTINCT TYPE + DATA LINK champ contenant un lien vers un fichier |
>--------LINK TYPE URL-----> -------NO LINK CONTROL----------------------------------- >----- - -- ---FILE LINK CONTROL---- - | INTEGRITY ALL * | | READ PERMISSION FS | | READ PERMISSION DB | |- WRITE PERMISSION FS -| WRITE PERMISSION BLOCKED RECOVERY NO ON UNLINK RESTORE ON UNLINK DELETE * indique si le fichier reste accessible au système de fichier et avec quels droit (FS : les droits du système de fichier, DB : les droits de la base uniquement) Avec FILE LINK CONTROL, le système vérifie la présence du fichier externe et garantie son intégrité, tant qu'il est référencé par la base |
Contrôle de présence (val obligatoire/facultative) -----------------------------------------------------------------------. !-- NOT NULL---------------------------------------------------! !------------------------- WITH DEFAULT---------------------! !--'constante'----! !---NULL----------! !---USER----------! !--CURRENT_DATE---! !--CURRENT_TIME---! !CURRENT_TIMESTAMP! - pas d'indication = valeur nulle admise Vous pouvez retrouver l'information par programme en demandant le placement de la colonne INTO :ZONE :IND (IND est binaire et indique si ZONE est nulle) - NOT NULL interdit la valeur nulle - NOT NULL WITH DEFAULT initialise à valeur par dft |
Contraintes d'entité: - désignation d'une clé unique (pour les valeurs non nulles) -------------------------------- UNIQUE-------------------- |--CONSTRAINT nom-contrainte-| |-(zonea, zoneb)-| + si CONSTRAINT nom-contrainte n'est pas renseigné le système génère automatiquement un nom par défaut + utilisable associé directement à une colonne CREATE TABLE (zone1 dec(3,0) UNIQUE, zone2 char(30), ... ou fin de définition de table si l'unicité est demandée sur plusieurs colonnes: CREATE TABLE (zone1 dec(3, 0), zone2 char(30), zone3 dec(2, 0), UNIQUE(zone1, zone3)) |
un index est créé avec la table (il fait partie de la table) - désignation d'une clé primaire (identifiant univoque). -------------------------------- PRIMARY KEY--------------- |--CONSTRAINT nom-contrainte-| |-(zonea, ..)-| + les clés primaires doivent être définies NOT NULL + même syntaxe que l'unicité + il peut y avoir plusieurs contraintes d'unicité, il ne peut y avoir qu'UNE SEULE clé primaire. CREATE TABLE (zone1 dec(3, 0), | CREATE TABLE (zone1 dec(3, 0), zone2 char(30) | zone2 char(30), PRIMARY KEY, | zone3 dec(2, 0), zone3 dec(2, 0) | PRIMARY KEY(zone1, zone2)) | |
Contraintes d'intégrité référentielle: Il s'agit de concrétiser le lien exitant entre deux tables. par des déclarations de contraintes, comme avec ADDPFCST. syntaxe générale ----------------------------------------------------------------------> | | | | |-CONSTRAINT nom-contrainte-| |-FOREIGN KEY-(zone1, ...)-| >------------REFERENCES autre-table----------------------------- | | |--(zone1 [, zone2 ...])-| >--------------------------------------------------------------- | | | | |--ON DELETE action-| |-- ON UPDATE action-| |
Exemple : create table command (NUMCDE DEC(6, 0) NOT NULL, ARTCDE CHAR(6) REFERENCES article, NUMCLI DEC(6, 0) REFERENCES clients) ici le code article doit exister dans la table article le n° de client doit exister dans la table clients. Comme avec les contraintes d'unicité et de clé primaire, si la clause CONSTRAINT n'est pas employée, le système génère un nom par défaut. Ou bien (si la référence porte sur plusieurs colonnes) FOREIGN KEY(zone1, zone2, ..) REFERENCES table create table livraison (NUMLIV DEC(6, 0) NOT NULL, NUMCDE DEC(6, 0) NOT NULL, NOLIGN DEC(3, 0) NOT NULL, FOREIGN KEY(numcde, nolign) REFERENCES lcommand) ici une livraison doit référencer une commande existante. |
ON DELETE, ON UPDATE : que faire si l'on supprime une ligne du fichier parent si l'on change la clé dans le fichier parent NO ACTION : ne rien faire,l'événement est interdit. le contrôle a lieu lors du COMMIT, la journalisation est OBLIGATOIRE. RESTRICT : ne rien faire,l'événement est interdit. le contrôle est immédiat, la journalisation facultative CASCADE : en cas de suppression, suppression des lignes associées dans la table qui référence. (en cas de suppression d'un client, suppression de toutes ses commandes) SET NULL : l'événement est autorisé et la clé étrangère de la table qui référence est mise à NULL (NULL doit être autorisé) SET DEFAULT: idem SET NULL avec la valeur/dft |
Check Contraints : il s'agit d'établir un contrôle sur une zone (doit être > à , <> de ...) devant être TOUJOURS vérifié. ces nouvelles contraintes seront vérifiés dans toutes les conditions en cas d'erreur ==> message CPF502F ---------------------------------- CHECK -----------------------> | | |-CONSTRAINT nom-contrainte-| ---( test logique valide)---. .......................................................... : Create table entcdep1 Datcde DATE , Datliv DATE : : Check (datliv > datcmd), ... : :........................................................: |