Inserción de campo DB2 mixto con ambas cadenas alfa y decimales envasados
-
20-12-2019 - |
Pregunta
A continuación se muestra un diseño de tabla / archivo para "sh.prom", una tabla de DB2 en un AS / 400 que es responsable de la representación mensual Promoción elementos en todo nuestro sistema. Cualquier persona que no esté familiarizada con los diseños típicos de la tabla debe saber que generalmente hay tres columnas: F00001, K00001 y F00002. A veces, un cuarto aparece en el nuestro (K00002). En nuestro sistema, F00002 generalmente sostiene múltiples subcampos que he proporcionado nombre, posición, longitud y tipos de datos para. Cualquier cosa en la columna de notas etiquetada 'pelusa' significa apagado a cero o 'espaciado' en los caracteres EBCDIC, por lo que no es importante desde un punto de vista de datos, pero aún debe estar allí correctamente.
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...
Estoy teniendo problemas insertando esas fechas de inicio / fin de promoción.
Si inserto datos en la columna F00002 como una cadena, se convierte automáticamente a los números EBCDIC:
INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP','0201140F0228140F...')
(*** Los puntos finales en los datos de inserción de F00002 significa que el resto sigue el diseño del archivo / tabla arriba.)
y F00002 como un entero solo para probarlo:
INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP',0201140...)
La columna omite el cero acolchado izquierdo y lo convierte a los caracteres EBCDIC nuevamente.
Aquí hay un ejemplo de un campo F00002 existente, así como dos squirritas útiles útiles :) (aka squirrel shot shot) Primero segundo :
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
¿Cómo inserto este campo F00002 para que los datos almacene correctamente?
Solución
La solución correcta sería describir externamente el archivo usando Especificaciones de descripción de datos (DDS) .
Los programas heredados no tendrán problemas para acceder a un archivo descrito externamente.
Una vez que se describe externamente, puede acceder a los campos normalmente y dejar que la base de datos de la base de manejo sea la conversión.
Aquí hay una muestra para comenzar.Sin las especificaciones de entrada reales de la fuente del programa, supondí en los lugares decimales para los campos numéricos.
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