Inserimento del campo DB2 misto con stringhe alfa e decimali confezionati
-
20-12-2019 - |
Domanda
Di seguito è riportato un layout tabella / file per "sh.prom", una tabella DB2 in AS / 400 in AS / 400 che è responsabile del rendering mensile di promozione Promotion in tutto il nostro sistema. Chiunque non abbia familiarità con i tipici layout del tavolo dovrebbe sapere che di solito ci sono tre colonne: F00001, K00001 e F00002. A volte un quarto appare nel nostro (K00002). Nel nostro sistema, F00002 di solito tiene più sottocampi multipli che ho fornito il nome, la posizione, la lunghezza e i tipi di dati per. Qualsiasi cosa nella colonna Notes ha etichettato "fluff" significa azzerato o "distanziato" in caratteri ebcdici in modo non importante da un punto di vista dei dati ma deve ancora essere presente correttamente.
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...
.
Sto avendo problemi che inseriscono quelle date di inizio / fine della promozione.
Se inserisco i dati nella colonna F00002 come stringa, converte automaticamente in numeri EBCDIC:
INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP','0201140F0228140F...')
.
(*** I punti finali sui dati di inserimento F00002 significa che il resto segue il file / layout della tabella sopra.)
e f00002 come numero intero solo per provarlo:
INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP',0201140...)
.
La colonna omette lo zero imbottito sinistro e lo converte in caratteri ebcdici di nuovo.
Ecco un esempio di un campo F00002 esistente e due strumenti utili :) (Aka SQL Squirrel Screen Shot) Prima secondo :
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
.
Come posso inserire questo campo F00002 in modo che i dati memorizza correttamente?
Soluzione
La soluzione corretta sarebbe descrivere esternamente il file usando Descrizione dei dati Specifiche (DDS) .
I programmi legacy non avranno problemi ad accedere a un file descritto esternamente.
Una volta che è descritto esternamente è possibile accedere a campi normalmente e lasciare la conversione del tipo di maniglia del database.
Ecco un campione per iniziare.Senza le specifiche di input effettivi dalla fonte del programma ho indovinato nei luoghi decimali per i campi numerici.
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
.