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

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

下面是“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/

相关文章:

sql - 错误 : column of relation does not exist PostgreSQL , 无法运行插入查询

postgresql - 如何嵌套 `insert ... returning`?

java - SQL 命令未正确结束更新

PHP 图表 - 用值填充缺失的日期

sql - DB2 SQL 全选,列为

asp.net - 连接到 AS400 时如何在 ASP.Net MVC 上设置动态连接字符串用户名和密码

oracle - 使用 Delphi 数据感知组件 - 优点和缺点

sql - 如何在 Big Query 中更新表并存储替换的原始值以及她与新值的差异

sql - 'select'缺少EOF错误

java - 使用 EJB 锁定数据源中的实体/行的最佳实践