Nouveaux types de données en V4R40

BoTTom |    Changer de couleur
 
 Vous pouvez maintenant manipuler vos variables HOST (dans un pgm RPG ...)
 
  par un ordre SQL :
 
 
  SET :variable = expression
 
  ou bien
 
  VALUE expression INTO :variable
 
 
 par exemple
 
         C/EXEC SQL
         C+  SET :Result = LEFT(:NOM, 10) CONCAT :PRENOM
         C/END-EXEC
 
         C/EXEC SQL
         C+  VALUE POSSTR(:RAISOC , 'Assurance') INTO :debut
         C/END-EXEC


|    Changer de couleur
 
 de nouveaux types de données apparaissent en V4R40 (ptf SF99104)
 
    les types de données LARGES (jusqu'à 15 Mo)
 
    les DATALINK (ou URL)
 
 
 
1/ les LOB (Large Object)
 
 
   ils sont de trois sortes
 
     + CLOB Chararcter Large Object, supportent la notion de CCSID
 
     + DBCLOB Double Byte CLOB, idem CLOB mais en DBCS
 
     + BLOB Binary Large Object, binaires, donc prévus pour les images
                                                            la video, etc...
 
     ex: CREATE TABLE VOITURE (image as BLOB 2M)


|    Changer de couleur
 
 > Une colonne de type LOB peut-être manipulée par
 
    -son contenu (si votre langage supporte des variables aussi grandes)
 
       vous devez déclarer en RPG par:
 
     DMYBLOB           S                   SQLTYPE(BLOB:500)
 
       ce qui génère :
 
     D MYBLOB          DS
     D MYBLOB_LEN                    10U 0
     D MYBLOB_DATA                  500A
 
 
L'exemple suivant montre comment utiliser les BLOB en JAVA:
 
     Blob   img = resultSet.getBlob ;
     long   lg  = blob.length ();
     byte[] R   = img.getBytes (0, (int) lg);
 


|    Changer de couleur
 
 Avec des produits comme VB ou autres (tests réalisés avec VB6)
 
   la gestion des images est transparente.
 
 
 Si vous utilisez un objet DATA Control nommé "data1"
 
 
    - définissez une image sur votre feuille (objet "image1")
 
    - renseignez les propriétés suivantes :
 
      image1.datasource = data1
      image1.datafield  = le nom du champ BLOB.
 
    VB reconnait l'image sur son contenu et traite aussi bien les
       GIF, JPG, BMP, ....(préférez GIF pour les temps de chargement)
 
 
 En programmation ODBC ou ADO utilisez LOADPICTURE( )
 


|    Changer de couleur
 
    -vous pouvez utiliser un identifiant appelé "LOCATOR", qui permet :
 
                                       + de ne pas transférer les data
                                         dans le programme (donc sur le PC)
 
                                       + de faire des copies de fichiers ...
 
       vous devez déclarer en RPG par:
 
     D MYCLOB          S                   SQLTYPE(CLOB_LOCATOR)
 
       ce qui génère :
 
     D MYCLOB          S             10U 0
 
       vous pouvez utiliser l'identifiant en lieu et place de la colonne
         par les nouvelles instructions SET et VALUE.
 
    C/EXEC SQL
    C+   VALUE POSSTR(:MYCLOB, 'formation') INTO :debut
    C/END-EXEC


|    Changer de couleur
 
 -vous pouvez utiliser un fichier appelé "FILE LOCATOR", qui permet :
 
                                       + de copier le contenu d'un LOB
                                          dans un fichier IFS
 
                                       + de renseigner un LOB à partir
                                          du contenu d'un fichier IFS.
 
       vous devez déclarer en RPG par:
 
     D MYFILE          S                   SQLTYPE(CLOB_FILE)
 
       ce qui génère :
 
     D MYFILE          DS
     D  MYFILE_NL                    10U 0        [lg du nom]
     D  MYFILE_DL                    10U 0        [lg des Data]
     D  MYFILE_FO                    10U 0        [file permission]
      * SQL génère SQFRD (2), SQFCRT (8), SQFOVR(16) et SQFAPP(32)
     D  MYFILE_NAME                 255A          [nom du fichier]
 


|    Changer de couleur
 
Exemple en COBOL
 
 en Working Storage Section :
 
     01 rapport USAGE IS SQL   TYPE IS CLOB-FILE
 
 puis en traitement
 
       move "RAPPORT.TXT"      to rapport-NAME.
       move  11                to rapport-LENGTH.
       move SQL-FILE-OVERWRITE to rapport-FILE-OPTIONS.
 
        EXEC SQL SELECT rapport INTO :rapport
                        FROM  ...
                        WHERE ...
         END-EXEC.
 
 ce traitement place copie du contenu de la colonne "rapport" dans le
     fichier "RAPPORT.TXT" qui est un fichier IFS.
 un ordre INSERT aurait renseigné la colonne par copie du fichier.
 


|    Changer de couleur
 
 Autre Grande nouveauté : les types de colonnes DATA LINK
 
  il s'agit de colonnes dont le contenu référence un fichier externe.
 
     a/ le nom du fichier est donné sous forme d'URL
 
     b/ le fichier reste à l'exterieur de la base de données
           (utilisable par votre serveur WEB, par exemple)
 
     c/ le serveur Base de données peut vous fournir un contrôle
           de type:
                     - je vérifie que le fichier existe lors de l'insertion
 
                     - je vérifie la présence du fichier tant qu'il est
                           référencé dans la base.
 
  vous devez lancer un serveur TCP/IP appelé DLFM  (DATA LINK FILE MANAGER)
    pour gérer ces contrôles.
 
  la table doit être journalisée.
 


|    Changer de couleur
 DLFM doit être initialisé par INZDLFM (une fois par AS/400)
 >il s'agit d'un script, qui créé une base de donnée.
 
  Exécution en cours : create collection QDLFM.
  Exécution en cours : create table dfm_rcfile (dbid    VARCHAR(8) FOR BIT D
 A NOT NULL,prfxid    VARCHAR(8) FOR BIT DATA  NOT NULL WITH DEFAULT,recov_i
  VARCHAR(6) FOR BIT DATA NOT NULL,rec_id    INTEGER,stemname  VARCHAR(128)
 T NULL WITH DEFAULT,grp_id_idx INTEGER,grp_genid VARCHAR(17) FOR BIT DATA N
  NULL WITH DEFAULT,pid       INTEGER,status    SMALLINT).
 
 .../...
 
  Exécution en cours : CREATE TABLE DFM_DIR (fsid               VARCHAR(8) F
  BIT DATA NOT NULL,inode              INTEGER NOT NULL,parent_inode       I
 EGER,dir_name           VARCHAR(240) NOT NULL,information        VARCHAR(64
 PRIMARY KEY(fsid, inode),FOREIGN KEY(fsid,parent_inode) REFERENCES dfm_dir
  DELETE CASCADE).
 Press ENTER to end terminal session.
  ===>                                                                      
                                                                            
  F3=Exit F4=End of File F6=Print F9=Retrieve F17=Top 
  F18=Bottom  F19=Left   F20=Right F21=User Window 


|    Changer de couleur
 
Exemple d'utilisation :
 
CREATE TABLE AF400/AF4URLP1 (AF4MDL CHAR ( 10) NOT NULL, AF4MBR
CHAR ( 10) NOT NULL, AF4URL DATALINK
                     LINKTYPE URL
                     FILE LINK CONTROL                 (1)
                     INTEGRITY ALL READ PERMISSION FS  (2)
                               WRITE PERMISSION FS
                               RECOVERY NO)            (3)
 
 
(1) : le contrôle d'exitence doit être fait.
      (sinon vous avez un contrôle de syntaxe uniquement, lors de l'INSERT)
 
(2) les droits sont ceux du fichier dans IFS
 
      (les seules droits considérés pourraient être ceux de la colonne)
 
(3) restauration de l'intégrité lors de restauration de la table (oui/non)
 
 


|    Changer de couleur
 
Quelques remarques :
 
 
 Avec les droits DB2, tous les droits sont retirés sur le fichier stream
 
    lors d'un SELECT SQL, vous retrouver un token ene même temps que l'URL
 
    seul ce token permet un accès au fichier (inaccessible hors DB2, donc)
 
 Avec les droits FS, le fichier est accessible normalement, seule la
  suppression est impossible tant qu'il est lié par DB2.
 
 
 
 Un fichier stream ne peut être lié qu'UNE SEULE FOIS !
 
  (impossible d'attribuer la même photo à deux articles)
 
 il est impossible de lire le contenu d'un DATALINK, seules les fonctions
  associées peuvent être manipulées (voir plus loin)
 


|    Changer de couleur
mise en place :
               PGM
 
               CRTJRNRCV  JRNRCV(AF400/AF4RCV0001) THRESHOLD(5000) +
                            TEXT('RECPTEURURNAL AF400')
 
               CRTJRN     JRN(AF400/AF4JRN) JRNRCV(AF400/AF4RCV0001) +
                            MNGRCV(*SYSTEM) DLTRCV(*YES) +
                            TEXT('JOURNAL POUR AF400')
 
               STRJRNPF   FILE(AF400/AF4URLP1) JRN(AF400/AF4JRN) +
                            IMAGES(*AFTER) OMTJRNE(*OPNCLO)
 
 
               WRKRDBDIRE  /* pour vérifier le nom RDB */
 
               STRTCPSVR  SERVER(*DLFM)
 
               ADDPFXDLFM PREFIX(('/AF4DIR'))
 
               ADDHDBDLFM HOSTDBLIB((AF400)) HOSTDB(S44R7480)
               ENDPGM


|    Changer de couleur
 
lors de nos tests, nous avons été obligés d'utiliser un fichier source, avec
 PTF SF99104 au niveau 6 minimum, ["dspdtaara sf99104" pour voir le niveau]
 
Qtxtsrc/hdb contenant : "AF400 QSYS S44R7480" sur une seule ligne
 
 puis la commande ADDHDBDLFM SRCFILE(QTXTSRC) SRCMBR(HDB)
 
ensuite
 
Qtxtsrc/pfx contenant : "/AF4DIR/AF4SRC/"     sur une seule ligne
 
 puis la commande ADDPFXDLFM SRCFILE(QTXTSRC) SRCMBR(PFX)
 
 
vous pouvez aussi utiliser directement le script dfmadmin sur un SHELL QSH
 
tapez STRQSH      [si QSH est installé, c'est l'option 30 de 5769SS1]
 
puis dfmadmin -help, qui vous donne le détail
     (de toutes façons, la commande appelle ce script)
 


|    Changer de couleur
 
$
dfmadmin
 
  Usage: /usr/bin/dfmadmin  [-debug] {-create|-delete|-drop} [<table>]
         /usr/bin/dfmadmin  [-debug] {-deletex|-createdb|-dropdb|-help|-sts}
         /usr/bin/dfmadmin  [-debug] {-start|-shutdown|-rmipc|-restart|-clnup}
         /usr/bin/dfmadmin  [-debug] -setup [<dlfm_db_config_file>]
         /usr/bin/dfmadmin  [-debug] -add_db < db_data_file
         /usr/bin/dfmadmin  [-debug] -add_prefix < prefix_data_file
  Description:
    -createdb       Creates DLFM database.
    -create         Creates all tables in DLFM database.
    -create <name>  Creates only the table <name> in DLFM database.
                    List of tables: dfm_access, dfm_archive, dfm_dbid,
                    dfm_file, dfm_grp, dfm_prfx, dfm_url, dfm_xnstate,
                    dfm_backup.
 
    -delete         Deletes data from all tables in DLFM database.
    -delete <name>  Deletes data from table <name> in DLFM database.
    -deletex        Deletes data from all tables other than dfm_dbid,
                    dfm_prfx and dfm_boot in DLFM database.


|    Changer de couleur
    -drop           Drops all tables in DLFM database.
    -drop <name>    Drops the table <name> in DLFM database.
    -dropdb         Drops the database DLFM database.
 
    -add_db         Reads data from standard input and adds to the
                    dfm_dbid database.  The input is the authorized
                    databases which can talk to this DLFM; the input
                    should be in the following format:
                      dbname instancename nodename
                      i.e. SAMPLE DBINST narang.almaden.ibm.com
                    A null line terminates the input data.  User can
                    keep these entries in a file and redirect the
                    file as an input.
    -add_prefix     Reads data from standard input and adds to the
                    dfm_prfx database. The input is the list of
                    authorized mount points (called prefix within
                    DLFM). The input should have one line for each
                    pathname.
                      i.e /home/video_repository
                    A null line terminates the input data.  User can
                    keep these entries in a file and redirect the
                    file as an input.


|    Changer de couleur
 
    -del_prefix     Read data from standard input and delete from the
                    dfm_prfx database those entries matching the input
                    data.  The input data is the same for add_prefix.
                    User can keep these entries in a file and redirect
                    the file as an input.
    -debug          Echoes the command to-be-done without doing anything.
    -steps          Shows help message for the recommended steps for
                    sane operations.
    -start          Starts DLFM server. You should perform createdb,
                    create (tables), add_db and add_prefix before running
                    the server.
    -stop           Stops the DLFM server. Server must be running
                    if you want to stop it.
    -shutdown       Shuts down the server. Use this command in case
                    stop command does not work. This command try to stop
                    the DLFM server cleanly else kills it removes the ipcs.
                    This command takes 30 to 40 secs for clean shutdown.
    -see            Shows the dlfm processes running on the system.
    -rmipc          Removes all IPCs used by your id.
    -restart        Equivalent of stop and start.
 


|    Changer de couleur
    -setup          Equivalent of createdb, create(tables).
    -cleanup        Equivalent of shutdown and deletex.
    -help or -?     Prints this message.
 
 
insertion de lignes
 
il faut utiliser la fonction DLVALUE('http://serveur/repertoire/fichier')
 
INSERT INTO AF400/AF4URLP1
 SELECT AF4MDL, AF4MBR,
  DLVALUE('HTTP://S44R7480/AF4DIR/'CONCAT TRIM(SRCLIB)
   CONCAT '/' CONCAT TRIM(SRCFIL) CONCAT '/' CONCAT
   TRIM(SUBSTR(SRCMBR, 2, 9)) CONCAT '.HTM', URL, 'commentaire')
 FROM AF400/AF4MBRP1
 WHERE AF4TYP = '*TXT' AND AF4MBR LIKE '£%'
 
.........................................................................
: dans cet exemple les noms des cours commencent par une livre (£)      :
:   et pas les pages HTML.                                              :
:.......................................................................:
 


|    Changer de couleur
 
DLVALUE vue plus haut , à utiliser pour renseigner un datalink
 
DLVALUE('URL d'accès au fichier stream' ou ' ' [URL non renseignée]
        ,
        URL
        ,
        'commentaire')
 
URL et 'commentaire' sont facultatifs
 
on peut assigner un commentaire à un datalink vide par
 
 DLVALUE(' ', URL, 'mon commentaire')
 
 
Autres fonctions :
----------------
soit un datalink renseigné par
 
  DLVALUE('HTTP://S44R7480/AF4DIR/AF4SRC/cours.htm', URL, 'mon commentaire')
 


|    Changer de couleur
 
DLURLCOMPLETE( ) -> retourne :
 
          'HTTP://S44R7480/AF4DIR/AF4SRC/*****************cours.htm'
 
            où '*******************' est le token permettant l'accès au
            fichier stream pour les permissions Data base.
 
 
DLURLPATH( )     ->  /AF4DIR/AF4SRC/*****************cours.htm
 
DLURLPATHONLY( ) ->  /AF4DIR/AF4SRC/cours.htm
 
DLCOMMENT( )     ->  'mon commentaire'
 
DLLINKTYPE( )    ->  URL (seule valeur admise aujourd'hui)
 
 
DLURLSCHEME( )   -> HTTP: [ou FILE:]
 
DLURLSERVER( )   -> S44R7480
 





©AF400