下面是“SH.PROM”的表/文件布局,这是 AS/400 中的 db2 表,负责在整个系统中呈现每月促销项目。任何不熟悉典型表格布局的人都应该知道,通常有三列:F00001、K00001 和 F00002。有时第四个出现在我们的(K00002)中。在我们的系统中,F00002 通常包含多个子字段,我为其提供了名称、位置、长度和数据类型。注释列中标记为“Fluff”的任何内容都意味着以 EBCDIC 字符进行归零或“间隔”,因此从数据角度来看并不重要,但仍然需要正确放置在其中。
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...
我在插入促销开始/结束日期时遇到问题。
如果我将数据作为字符串插入到 F00002 列中,它会自动转换为 EBCDIC 数字:
INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP','0201140F0228140F...')
(***F00002 插入数据上的尾随点表示其余部分遵循上面的文件/表布局。)
将 F00002 作为整数来尝试一下:
INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP',0201140...)
该列省略左侧填充的零并再次将其转换为 EBCDIC 字符。
这里是现有 F00002 字段的示例以及两个有用的 SquirrelShots :)(又名 SQL Squirrel 屏幕截图)First Second :
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
如何插入此 F00002 字段以便正确存储数据?
最佳答案
正确的解决方案是使用 Data description specifications (DDS) 从外部描述文件。
旧程序访问外部描述的文件不会有问题。
一旦外部描述,您就可以正常访问字段并让数据库处理类型转换。
这是一个可以帮助您入门的示例。如果没有来自程序源的实际输入规范,我猜测数字字段的小数位。
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
关于sql - 插入带有字母字符串和压缩小数的混合 db2 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21003167/