Accéder au contenu principal Passer au contenu complémentaire

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.

Note InformationsRemarque : L'ordre de déclaration des zones détermine l'ordre des zones dans le buffer. 

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. 

Note InformationsRemarque : Un champ ZONED ou PACKED peut comporter jusqu'à 31 chiffres significatifs que vous pouvez distribuer entre partie entière et partie décimale selon vos besoins.
Note InformationsRemarque : Les floats sont des numériques stockés en mantisses et exposants et sont donc des approximations de la valeur d'origine (ordre de grandeur stocké sous forme de puissances de 2). Par conséquent, selon la manière dont est exprimée la sortie, l'arrondi sera plus ou moins fin.

 

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. 

Note InformationsRemarque : Le nom du champ suivant le terme BASED ne doit pas être précédé du nom du buffer car le champ "basé" et le champ de base sont toujours dans le même buffer.

 

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).
Note InformationsRemarque : Généralement, les bases de données SQL n'acceptent pas qu'un champ faisant partie d'une clé primaire (contrainte PRIMARY KEY) contienne une valeur nulle.

 

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.

 
Note InformationsRemarque : Pour que l'agrégation en ligne fonctionne, le type d'accès doit être SQL.

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – dites-nous comment nous améliorer !