Déclaration de champ
Vous déclarez un champ dans la fenêtre de déclaration (3), quel que soit le buffer auquel il appartient.
La syntaxe de déclaration d'un champ est la suivante :
Source AS/400 IBMi
DCL I.field CHAR length[,decimals] [BASED field POS position] …
O ZONED
B PACKED
S BIN
W FLOAT
V NCHAR
X VARCHAR
SCRIPT
… [DESC ’description’] [NULL Yes/No/Rtrim/Same] [DATEFMT format] …
… [KEYORDER OrderNumber] [AGGREGATE Yes/No] [FIELDOPT Insert/Update/Never/ Insert/Update]
Types de zones
Type | Description |
---|---|
CHAR | Champ alphanumérique pouvant avoir une longueur de 1 à 32 765 caractères (chaque buffer est limité à 32 765 caractères). |
ZONED | Champ numérique stocké au format zoné dans la mémoire (un chiffre par octet). La virgule flottante n'est pas stockée dans la mémoire. Le signe est combiné au dernier chiffre. |
PACKED | Champ numérique stocké en mémoire en mode packé BCD (1 chiffre par demi-octet). La virgule flottante n'est pas stockée dans la mémoire. Le signe est stocké dans le dernier demi-octet de droite. |
BIN | Champ numérique acceptant les valeurs : , ou entiers de 4 ou 8 octets. |
FLOAT | Champ numérique acceptant : - ou les valeurs à virgule flottante occupant 8 octets. |
NCHAR | Champ alphanumérique au format Unicode UCS2, communément appelé ASCII. |
VARCHAR | Type alphanumérique. Sur une cible AS/400 IBMi, si la méthode d'accès n'est pas SQL, la valeur VARCHAR est traitée comme une valeur CHAR. Lorsque la longueur d'un champ varchar est inférieure à la limite autorisée, la valeur est délimitée par un zéro binaire. |
SCRIPT | Permet d'envoyer une instruction (sysdate par exemple) ou une sous-requête SQL. Sur une cible AS/400 IBMi, il sera pris en compte uniquement si la méthode d’accès est de type SQL. |
La longueur des zones de type NCHAR (Unicode UCS2) est doublée. Un champ NCHAR de 5 caractères occupe 10 octets sur le disque.
Sur une cible AS/400 IBMi, si la méthode d'accès n'est pas SQL, les zones VARCHAR et script sont traitées comme des zones CHAR.
Les valeurs Float peuvent être utilisées telles quelles et écrire en sortie vers une cible AS/400 IBMi ou NT.
Dans le module de transformation, les valeurs Float peuvent être utilisées comme n'importe quelle champ numérique et être attribuées à des champs ZONED et PACKED. L'instance AS/400 IBMi effectue la conversion avec un arrondi en fonction de la précision définie pour le champ de sortie.
Exemples :
Si vous envoyez un float as vers un float NT, le résultat est le suivant :
Valeur saisie : -987654321.123456789
Valeur stockée sur AS/400 IBMi : -9,8765432112345684E+008
Valeur reçue par la cible NT ou par AS/400 IBMi en mode SQL : 9,8765430E+08
Valeur saisie : 32.22
Valeur stockée sur AS/400 IBMi : 3,2219999999999999E+001
Valeur reçue par la cible NT ou par AS/400 IBMi en mode SQL : 3,2219999E+01
Si vous convertissez le float en un nombre ZONED (ou PACKED) de 31,15 (31 chiffres DONT 15 décimales)
Valeur saisie : -987654321.123456789
Valeur stockée sur AS/400 IBMi : -9,8765432112345684E+008
Valeur reçue par la cible NT ou par AS/400 IBMi en mode SQL : 0000000987654321.123456835746765
Source non AS/400 IBMi
DCL I.field CHAR length[,decimals] [BASED field POS position] …
O NUMERIC
B IMAGE
S RAW
W SCRIPT
V TEXT
X
… [DESC ’description’] [NULL Yes/No/Rtrim/Same] [DATEFMT format] …
… [KEYORDER OrderNumber] [AGGREGATE Yes/No] [AGREGATE Yes/No] [FIELDOPT Insert/Update/Never/ Insert/Update]
Types de zones
Type | Description |
---|---|
CHAR | Champ alphanumérique pouvant avoir une longueur de 1 à 32 765 caractères (chaque buffer est limité à 32 765 caractères). Un champ de caractères est traité comme varchar par défaut, complété ou non par des blancs, selon la valeur de l'option NULL. Sur une cible AS/400 IBMi, une zone sera traitée uniquement comme VARCHAR si la méthode d'accès est SQL. |
ZONED | Champ numérique stocké au format zoné dans la mémoire (un chiffre par octet). La virgule flottante n'est pas stockée dans la mémoire. Le signe est combiné au dernier chiffre. |
IMAGE | Définit un champ cible de type varbinary |
RAW (BRUT) | Same than IMAGE (Identique à Image) |
SCRIPT | Permet d'envoyer une instruction (sysdate par exemple) ou une sous-requête SQL. Sur une cible AS/400 IBMi, le fichier cible doit être traité avec la méthode d'accès SQL. |
TEXT | Définit un champ cible de type longvarchar |
BASED
Un champ "basé" correspond à une redéfinition de champ dont le premier octet est indiqué par le paramètre POS sur le champ définie après le paramètre BASED.
Exemple :
Représentation du Buffer I dans la mémoire.
Imaginez que vous souhaitez définir :
-
un champ FieldA qui recouvre à la fois les champs Field3 et Field4, pour permettre une lecture en une opération
-
un champ FieldB utilisé pour lire un extrait du champ Field5
Les déclarations suivantes sont nécessaires :
DCL I.ZONEA ZONED 16,0 BASED ZONE3 POS 1
DCL I.ZONEB CHAR 4 BASED ZONE5 POS 3
Notez que les types des zones FieldA et FieldB ne sont aucunement connectés aux zones Field3, Field4 et Field5.
Le terme BASED est utilisé dans certains cas pour éviter de devoir définir un champ intermédiaire dans un buffer de travail (V ou W) et d'utiliser des instructions d'affectation pour l'alimenter.
DESC
Ce paramètre est utilisé aux mêmes fins que le champ Description dans l'onglet Fields des propriétés de la table. Il est utilisé pour spécifier une description associée au champ.
Exemple :
DCL O.CODDFV CHAR 1 DESC 'Quote/bill/credit note code'
Null
Ce paramètre est utilisé aux mêmes fins que le champ Null dans l'onglet Fields des propriétés de la table.
Il spécifie si une valeur nulle doit être envoyée pour une champ vide vers une base de données SQL ou une instance AS/400 IBMi en mode SQL, en vous basant sur ces règles :
Null | Type | Règle |
---|---|---|
Oui | Alpha | Les blancs à droite sont supprimés. Si le champ est vide, la valeur Null est envoyée. |
Non | Alpha | Les blancs à droite ne sont pas supprimés. |
Rtrim | Alpha | Les blancs à droite sont supprimés et si le champ est vide, la valeur " " est envoyée. |
Same (Idem) | Alpha | Aucun traitement n'est effectué. Les valeurs vides sont vides, les valeurs nulles sont nulles et les varchar restent des varchar. |
Oui | Numérique | Si la valeur contenue dans le champ est 0, alors la valeur Null est envoyée. |
Non | Numérique | Si la valeur contenue dans le champ est 0, alors la valeur 0 est envoyée. |
Same (Idem) | Numérique | Aucun traitement, les valeurs nulles sont nulles, les 0 sont 0. |
Rtrim | Numérique | Même résultat que pour No (Non). |
Oui | Date | Si la valeur contenue dans le champ est 0 ou blanche, alors la valeur Null est envoyée. |
Non | Date | Si la valeur contenue dans le champ est 0 ou blanche, alors la valeur Null est envoyée. |
Same (Idem) | Date | Les données envoyées sont exactement celles reçues ou calculées. Les nulls sont nulls, les dates sont des dates |
Rtrim | Date | Même résultat que pour No (Non). |
Exemple :
DCL O.CODDFV CHAR 1 DESC 'Quote/bill/credit note' NULL No
DATEFMT
Ce paramètre est utilisé aux mêmes fins que le champ Date dans l'onglet Fields des propriétés de la table.
Il spécifie si le champ contient une date, si elle doit être utilisée pour un champ de type date SQL et son format de stockage.
Par exemple, si le champ source contient une date stockée au format alphanumérique ou numérique, avec quatre chiffres pour l'année, deux pour le mois et deux pour le jour, vous devez sélectionner le format YYYYMMDD.
Dans les formats : C représente le siècle (0=19, 1=20), Y représente l'année, M le mois, D le jour, HHMM représente l'heure sur deux caractères suivie des minutes sur deux caractères, HHMMSS représente l'heure sur deux caractères, suivie des minutes sur deux caractères et des secondes sur deux caractères.
Si vous utilisez deux caractères (format YY) pour indiquer l'année, l'année qui en résulte, dans un format à quatre caractères est 20YY, si la valeur de YY est inférieure à 40 et 19YY, si la valeur de YY est supérieure à 40.
Si vous souhaitez appliquer d'autres règles que les règles standards, vous devez utiliser le module de transformation.
Exemple :
DCL O.DATPAI PACKED 8,0 DATEFMT YYYYMMDD NULL Yes
Dans le cas d'une source AS/400 IBMi transmettant à une cible NT, si la date source contient 0001-01-01, elle sera considérée comme nulle et la valeur NULL sera attribuée à la date sur la cible.
Dans le cas d'une source non AS/400 IBMi (Oracle, SQL Server, ODBC) transmettant à une cible AS/400 IBMi, si une date est nulle, alors la valeur 0001-01-01 sera attribuée.
KEYORDER
Ce paramètre est utilisé aux mêmes fins que le champ Key order dans l'onglet Fields des propriétés de la table.
Il spécifie si le champ fait partie de la clé utilisée pour accéder à l'enregistrement sur la table cible et indique le numéro de la zone dans la composition de la clé.
Exemple :
DCL O.CODDFV CHAR 1 DESC 'Quote/bill code' KEYORDER 1
FIELDOPTION
DCL O.DATADD PACKED 8,0 DATEFMT YYYYMMDD NULL Yes FIELDOPTION Insert
Ce paramètre indique lorsque le champ/la colonne est affichée :
-
Insert/update (Insertion/mise à jour)
Le champ/la colonne est utilisé·e uniquement lorsque des insertions et des mises à jour sont effectuées.
-
Insert (Insertion)
Le champ/la colonne est utilisé·e uniquement lorsque des insertions sont effectuées.
-
Update (Mise à jour)
Le champ/la colonne est utilisé·e uniquement lorsque des mises à jour sont effectuées.
-
Never (Jamais)
Le champ/la colonne n'est jamais utilisé·e mais est envoyé·e à la cible pour être utilisé·e, par exemple pour des transformations.
AGGREGATE
Ce paramètre spécifie que le champ/la colonne sera géré·e comme une colonne agrégée.
Exemple :
Vous souhaitez gérer un agrégat client à partir de la table FACTISALES (Ventes) avec, par client, le nombre de factures et le montant total facturé.
Vous devez définir le critère de regroupement de l'agrégat comme étant la clé de l'agrégat (le code client CUSTKEY dans cet exemple).
Les zones agrégées étant SALEAMOUNT et SALENUMBER, vous devez indiquer Yes pour ces zones AGGREGATE.