插入带有alpha字符串和压缩小数的混合db2字段

时间:2014-01-08 18:01:48

标签: sql ibm-midrange sql-insert db2-400

下面是“SH.PROM”的表格/文件布局,这是AS / 400中的db2表,负责在整个系统中呈现每月促销项目。任何不熟悉典型表格布局的人都应该知道通常有三列:F00001,K00001和F00002。有时第四个出现在我们的(K00002)。在我们的系统中,F00002通常包含多个子字段,我提供了名称,位置,长度和数据类型。注释列中标记为“绒毛”的任何内容都表示在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字段以便正确存储数据?

1 个答案:

答案 0 :(得分:2)

正确的解决方案是使用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