Insertion de champ mixte DB2 avec des chaînes alpha et des décimales emballées
-
20-12-2019 - |
Question
Ci-dessous est une disposition de table / fichier pour "sh.prom", une table DB2 dans un AS / 400 responsable de la rendu mensuel
Field Pos. Len. Name Type Notes
---------------------------------------------
F00001 1 2 MACT Alpha Activity Code, Always 1 or 9 (active/inactive)
K00001 1 20 MITEM Alpha Item Number
K00001 21 2 MP Alpha Unknown title, Always 'P'
K00001 23 2 MPITCL Alpha Unknown title, Always 'P' or 'I'
F00002 1 8 MSTDAT Integer Promotion Start Date, MMDDYY0F
F00002 9 8 MEXDAT Integer Promotion End Date, MMDDYY0F
F00002 17 8 MLIST Decimal Amount to be subtracted from original price
F00002 25 8 MRETAL Decimal Fluff, 0000000f
F00002 33 8 MCOST Decimal Fluff, 0000000f
F00002 41 10 MQTY Decimal Fluff, 000000000f
F00002 51 6 MPCHNG Integer Fluff, 00000f
F00002 57 12 MNPEFT Alpha Fluff, 404040404040
F00002 69 8 MNSTDT Integer Fluff, 0000000f
F00002 77 8 MNEXDT Integer Fluff, 0000000f
F00002 85 8 MNLST Decimal Fluff, 0000000f
F00002 93 8 MPNRTL Integer Fluff, 0000000f
F00002 101 8 MNCOST Decimal Fluff, 0000000f
F00002 109 8 ZZ14 Alpha Fluff, 40404040
F00002 117 8 MALPHA Alpha Fluff, 40404040
F00002 125 170 ZZ64 Alpha Fluff, 40404040404040...
J'ai des problèmes d'insertion de ces dates de début / fin de promotion.
Si j'insère des données dans la colonne F00002 en tant que chaîne, elle convertit automatiquement sur les numéros EBCDIC:
INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP','0201140F0228140F...')
(*** Les points de fuite des données d'insertion de F00002 désignent le reste suivant la disposition de fichier / table ci-dessus.)
et f00002 comme un entier juste pour l'essayer:
INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP',0201140...)
La colonne omet le zéro gauche gauche et le convertit à nouveau sur des caractères EBCDIC.
Voici un exemple de champ F00002 existant ainsi que deux écureuils utiles :) (aka SQL Squirrel Screen Shot) Premier Deuxième :
08 01 13 0f 01 31 14 0f 00 00 38 0f 00 00 00 0f 00 00 00 0f 00 00 06 80 0f 00 00 0f f0 f0 f0 f0 f0 f0 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40
Comment insérer ce champ F00002 pour que les données stockent correctement?
La solution
La solution correcte consisterait à décrire de manière externe le fichier en utilisant Description des données Spécifications (DDS) .
Les programmes hérités n'auront aucun problème à accéder à un fichier décrit de l'extérieur.
Une fois que cela est décrit de l'extérieur, vous pouvez accéder aux champs normalement et laisser la base de données de type conversion de type.
Voici un échantillon pour vous aider à démarrer.Sans les spécifications d'entrée réelles de la source de programme, j'ai deviné à la décimale pour les champs numériques.
A R PROM
A MACT 2A
A MITEM 20A
A MP 2A
A MPITCL 2A
A MSTDAT 8S 0
A MEXDAT 8S 0
A MLIST 8S 2
A MRETAL 8S 2
A MCOST 8S 2
A MQTY 10S 0
A MPCHNG 6S 0
A MNPEFT 12A
A MNSTDT 8S 0
A MNEXDT 8S 0
A MNLST 8S 2
A MPNRTL 8S 2
A MNCOST 8S 2
A ZZ14 8A
A MALPHA 8A
A ZZ64 170A
A K MITEM
A K MP
A K MPITCL