以下是“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字段的示例以及两个有用的松鼠鼠标:)(AKA SQL Squirrel屏幕截图)第一个 第二

  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字段,以便数据存储正确?

有帮助吗?

解决方案

正确的解决方案是使用数据描述规范(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
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top