Octobre 2002
PASE, Unix sur AS/400 (compatibilité complète avec AIX 4.3),
gratuit à partir de la version 5.20
5799PTL, des outils d'origine universitaire portés sur AS/400 et comprenand
un client X11 et un serveur VNC.
tout cela donne des outils Unix (éditeurs EZ et emacs,
etc ...) sur AS/400, mais affichés dans un terminal X :
Websphere development studio client for iseries.
Il s'agit du produit venant remplacer la version Websphere dev.
studio livrée en V5R10.
rappels :
- ce produit s'inscrit dans le contexte Websphere Dev. Tools, contenant
SEU, PDM, etc..,.coté serveur.
- il s'agit , en fait, des outils de developpement. pour iseries, en utilisation
client serveur, contenant :
- RSE (équivalent PDM, trés réussi )
- Code/400 (SEU, SDA et RLU à la souris)
- et maintenant dans le cadre d' ECLIPSE, tout ce qu'il faut pour :
JAVA, HTML, JSP et XML !!!
- vous y avez droit dans le cadre de l'abonnement logiciel (même en
V4R50 et V5R10).
- la dernière version est la V4, mais est livrée, soit sur
commande, soit avec la V5R20 de l'OS/400 et utilise maintenant Eclipse
premier aperçu :
Ce produit est aux développeur, ce que Operation navigator est aux hommes
système/réseau et aux exploitants.
RSE vous permet d'accéder aux ressources suivantes :
- Fichier locaux
- Objets iseries
- PDM (*LIBL, objets, membres)
un éditeur est intégéré,
mais vous pouvez aussi lancer CODE/400
- Commandes iseries
- passer des commandes (avec invite)
- Travaux iseries
- Fichiers IFS
- accès à l'arborescence de l'OS/400
|
|
CODE/400, restant toujours disponible (particulièrement pour les DSPF
et PRTF)
- vos commandes (avec invite, svp...)
- gestion de vos JOB
- gestion des fichiers IFS
Vous pouvez ouvrir plusieurs perspectives (ensembe de fenêtres liées entre elles), afin d'accèder
à WebFacing, par exemple.
Nouveautés V5R20 du compilateur ILE/RPG-IV
RPG-IV en V5R20 :
° transformation directe de chaines en numérique (%DEC, %INT , etc...)
° Nombreuses améliorations sur les DS :
- DIM admis
- DS dans une DS, ...
- DS par copie d'un format, plus souple.
° nouvelles fonctions de manipulation de bits
° une clé complexe peut être indiquée sur le CHAIN (sans KLIST)
° une liste des zones à mettre à jour peut être indiquée sur UPDATE
° nouveaux opérateurs += , -= , *= , /= (expressions en format libre)
|
Data Structures :
- rappels V5R10
QUALIFIED, permet de manipuler une DS par nomDS.nomdezone
LIKEDS , permet de créer une DS identique à une autre
(QUALIFIED implicite)
- le mot clé DIM est admis sur les DS (QUALIFIED obligatoire)
D test DS DIM(20) QUALIFIED
D zone1 4
D zone2 3 0
puis manipulation par
/free
x += 1 ; // <- nouveauté V5R20, voir plus loin.
test(x).zone1 = 'toto';
/end-free
|
- le mot clé LIKEDS est admis sur une sous-zone
> Dim est admis, pour des tableaux à n dimensions
> ALTSEQ est "hérité" de la DS d'origine
> OCCURS et INZ ne le sont PAS ==> utiliser INZ(*likeds)
D test1 DS
D zone1 4
D zone2 3 0
D test2 DS QUALIFIED
D zonea 4
D zoneb 3 0
D zonec LIKEDS(test1)
puis manipulation par
/free
test1.zone1 = 'toto';
test2.zonec.zone1 = 'truc';
/end-free
|
pour déclarer une DS "modèle", uniquement pour utilisation avec LIKEDS :
D wptr S *
D test1 DS based(wptr)
/free
test2.zonec.zone1 = 'truc';
// ATTENTION : test1.zone1 = 'toto' ==> PLANTE le pgm !
/end-free
- le mot clé LIKERCD permet une définition de DS par copie d'un format
(comme les DS externes) , mais avec choix des zones à copier.
LIKERCD(nom-format : *ALL | *OUTPUT | *INPUT | *KEY)
*ALL copie de toutes les zones.
*INPUT les zones en entrée (comme les DS externes)
*OUTPUT les zones en sorties
*KEY uniquement les zones clés.
cette dernière option permet : CHAIN %KDS(nom-ds) fichier
|
- modification des ordres de lecture (CHAIN, READ, etc...)
- les ordres de lecture admettent un nom de DS en dernier argument
(format libre uniquement), permettant de placer la lecture
automatiquement dans une DS (avant c'était possible, mais en interne)
READ format nom-de-ds ;
- CHAIN, READE, SETLL, SETGT, DELETE
admettent une définition de clé complexe, comme suit :
CHAIN Klist fichier;
CHAIN (zone1 : zone2 : zone4) fichier ;
CHAIN %KDS(nom-de-DS) ; // (créé par LIKERCD(*KEY) ou non)
|
- UPDATE admet une liste des zones à modifier (pour modif partielle)
avec la fonction %FIELDS()
UPDATE format %FIELDS(zone1 : zone2 : zone4) ;
- transformation numérique, les fonctions :
%DEC , %DECh , %INT, %INTh, %UNS , %UNSh , %FLOAT admettent un
argument de type chaine et le transforment en numérique.
les signes + et - sont admis à gauche ou à droite.
la marque décimale peut être , ou .
les espaces sont ignorés.
/free
R = %dec('+ 3,25') + 1; // retourne 4,25
/end-free
|
- fonctions de manipulation de bits
(manipulation d'attributs d'affichage ou fonctions réseau) :
%BITNOT() inverse les bits
%BITNOT(x'00') = x'FF'
%BITOR() applique un OU logique, bit à bit
%BITOR(x'F0' : x'0F') = x'FF'
%BITAND() applique un ET logique, bit à bit
%BITAND(x'F1' : x'1F') = x'11'
%BITXOR() applique un ET exclusif, bit à bit
%BITXOR(x'F1' : x'1F') = x'EE' : 1111 0001
0001 1111
----------
1110 1110
|
- DTAARA(*VAR : ), le nom de la data-area peut être une variable.
DATAARA(MADA) : on utilise MADA dans *LIBL
DATAARA(*VAR:MADA) : on utilise le contenu de la variable RPG "MADA"
- les zones numériques acceptent un maximum de 31 chiffres
(avant c'était 30), RPG devenant pleinement compatible avec DB2/400.
- on admet de nouveaux opérateurs, dans les expressions :
+= : x += 1 identique à x = x + 1
-= : x -= 1 x = x - 1
*= : x *= 2 x = x * 2
/= : x /= 2 x = x / 2
uniquement valide dans les expressions en format libre.
|
Nouveautés SQL en V5R20
nouveautés SQL en V5R20 :
- variables de type ROWID, permettant une génération automatique de clé
- fonction SQL, retournant une table et utilisable dans la clause FROM
(en fait la fonction retourne une ligne à la fois)
- Notion de TABLE TEMPORAIRE (DECLARE GLOBAL TEMPORARY TABLE)
- HOLD LOCATOR
- SAVEPOINT (ou point de reprise) permettant un retour arrière ROLLBACK,
avec choix du point du "moment" logique de reprise.
|
- clé générée automatiquement, deux syntaxes :
> dans les deux cas on peut préciser :
--ALWAYS-------- toujours
GENERATED --- --->
-- BY DEFAULT--- uniquement si la zone est nulle
A/ ROWID. Il s'agit de variable VARCHAR(40) contenant des valeur générées
de manière non consécutive.
Create TABLE test1 (ID AS ROWID GENERATED ALWAYS ,
LIB CHAR(40), DATCRT DATE)
B/ AS IDENTITY , est associé à un champ numérique sans décimales,
Create TABLE test1 (ID INTEGER AS IDENTITY START WITH 100,
LIB CHAR(40), DATCRT DATE)
|
on peut alors préciser avec AS IDENTITY :
--START WITH (valeur initiale)----------------->
>-INCREMENT BY (incrément)---------------------->
--MINVALUE (valeur mini) -
>-- ----------------->
--NO MINVALUE ---------- -
--MAXVALUE (valeur maxi) -
>-- ----------------->
--NO MAXVALUE ---------- -
-- CYCLE---------- ---ORDER-------
>-- ---- ------->
--NO CYCLE-------- --- NO ORDER---
avec CYCLE, quand MAXVALUE est atteint on recommence à MINVALUE.
NO ORDER indique une numérotation qui peut ne pas être réalisée dans
l'ordre des requêtes.
|
et enfin :
-- CACHE x ---- indique que DB2/400 peut garder
>---- -------------- . en mémoire les x dernières valeurs
--NO CACHE---- (plus rapide)
AS IDENTITY est un attribut d'un champ numérique
ROWID est un nouveau type de champ (à déclarer en RPG par SQLTYPE(ROWID).)
Exemple :
CREATE TABLE TABCDE
(CDENO SMALLINT NOT NULL
GENERATED ALWAYS AS IDENTITY
(START WITH 500
INCREMENT BY 1
CYCLE),
LIVREA VARCHAR (36) ,
CDEDAT DATE)
|
les ordres INSERT et UPDATE sont completés comme suit :
UPDATE nom-table ----------------------------------SET ... -->
| |
|-OVERRIDING SYSTEM VALUE--|
| |
|-OVERRIDING USER VALUE----|
Avec OVERRIDING SYSTEM VALUE, on peut modifier une colonne ROWID ou
AS INDENTITY, avec GENERATED ALWAYS.
Avec OVERRIDING USER VALUE, on peut modifier une colonne avec
GENERATED ALWAYS ou GENERATED BY DEFAULT.
sans indication la clause SET ne peut PAS manipuler une clé générée
avec la clause GENERATED ALWAYS, mais on peut manipuler
une zone AS IDENTITY GENERATED BY DEFAULT.
Par contre une zone de type ROWID avec GENERATED BY DEFAULT,
uniquement si la nouvelle valeur a elle même été génerée par DB2.
(copie de fichier, par exemple)
|
- création de table par référence :
en V5R10 CREATE TABLE admet la clause like
si vous souhaitez dupliquer aussi la clause IDENTITY, il faut indiquer
CREATE CLITEMP LIKE CLIENTS INCLUDING IDENTITY
SQL admet, en plus, en V5R20 la syntaxe suivante, permettant
une duplication partielle de la liste des zones [du format] :
CREATE TABLE nom-fichier AS (sous-sélection)
WITH [NO] DATA [INCLUDING IDENTITY]
avec WITH DATA, la table est créé et les données dupliquées.
Exemple :
CREATE TABLE CLITEMP AS (SELECT nomcli, adr1, adr2, dept, ville from CLI)
WITH NO DATA
|
- tables temporaires :
DECLARE GLOBAL TEMPORARY TABLE (même syntaxe que CREATE TABLE) -->
--DELETE ROWS--- --DELETE ROWS---
>-- ON COMMIT-- -- ON DELETE ---->
-PRESERVE ROWS-- - PRESERVE ROWS-
>---------------------------------------
| | | |
|--WITH REPLACE--| |--NOT LOGGED-|
créé une table dans QTEMP (peut être qualifiée aussi par "SESSION")
WITH REPLACE permet une création avec remplacement, si la table existe
déja dans QTEMP
NOT LOGGED, indique une table non journalisée (insensible aux ROLLBACK)
|
Exemples :
DECLARE GLOBAL TEMPORARY TABLE CLIENTS
(nocli integer, raisoc char(50),
adr1 varchar(50) , ville varCHAR(50) )
WITH REPLACE
DECLARE GLOBAL TEMPORARY TABLE CLITEMP AS
(SELECT nocli , raisoc, adr1 , ville
from clients) WITH DATA
Dans tous les cas de figure, la table n'apparait pas dans les catalogues SQL
est détruite en fin de session.
- SAVEPOINT
Cette notion permet de matérialiser des étapes dans une transaction
offrant la possibilité de revenir à une étape précise et non au début
de la transaction en cas de ROLLBACK.
|
un point de reprise est posé par l'instruction SAVEPOINT (un SEUL AS/400)
UPDATE client ... ;
SAVEPOINT MAJ ON ROLLBACK RETAIN CURSOR ;
DELETE FROM CLIENTS ... ;
DELETE FROm COMMANDES ;
SAVEPOINT DLT ;
INSERT INTO ... ;
IF xxx ROLLBACK TO SAVEPOINT MAJ
ELSE RELEASE SAVEPOINT ;
ON ROLLBACK RETAIN CURSOR, permet de garder le(les) curseur(s) ouverts
ON ROLLBACK RETAIN LOCKS , permet de garder les verrouillages/ligne
RELEASE SAVEPOINT, libère (détruit) le point de reprise
|
Fonction retournant une table.
Vous pouvez écrire une fonction (PL/SQL ou RPG) retournant une table.
il s'agit en fait d'un programme retournant des données non Base de données
(une ligne à la fois), permettant d'utiliser avec SQL des informations
externes (fichiers IFS, fichier en interne, XML, ...)
la fonction est appellée une fois pour initialiser le dialogue
puis une fois par ligne à retourner et enfin une ultime fois à la fin.
CREATE FUNCTION nom-fonction ( [param1 [,param2 ..]] )
RETURNS TABLE (zone1 char(50), zone2 dec(7, 2) ....)
la fonction est utilisée ensuite directement dans la clause FROM, par :
SELECT zone1 from TABLE( fonction(paramètre) )
une jointure est possible
|
- Toutes les fonctions acceptent un nouveau paramètre :
FENCED , la fonction s'exécute dans un thread à part
(plus sûr, plus gourmand en ressources)
NOT FENCED , le contraire.
- HOLD LOCATOR nom-variable.
pour les variables contenant un pointeur sur un champ BLOB ou CLOB,
le pointeur reste valide après la transaction (COMMIT).
- UNION admis dans le CREATE VIEW
CREATE VIEW v1 AS SELECT * FROM FACTURES
UNION
SELECT * FROM ARCHIVES
|
- les expressions utilisées dans ORDER BY, n'ont plus à être présentes dans
la liste des colonnes du SELECT.
- notion de CURRENT SCHEMA
contient la base de données à utiliser pour les ordres non qualifiés
à l'origine : USER (l'utilisateur en cours) en dénomination *SQL
*LIBL en système de dénomination *SYS (système)
modifiable maintenant par SET SCHEMA
SET ----------------SCHEMA-----------------------------------------
| | | |
|-CURRENT--| |--un-nom---|
| |
|--DEFAULT--|
| |
|--USER-----|
|
Retourner au Début
Copyright © 1995,2002 VOLUBIS