如何从具有十进制字段的文件更新表?

时间:2010-12-16 06:57:53

标签: db2 cobol

我正在编写一个cobol程序来读取PS文件并根据PS文件中设置的标志更新DB2表。文件中的一个字段在cobol程序中声明为十进制字段。但是当我尝试更新表中的那个字段时,它显示错误。我应该在表中声明相同的字段以及如何为字段编写更新语句?

字段名称是带有小数点的工资。

2 个答案:

答案 0 :(得分:1)

如果你要发布PICTURE / USAGE条款会更有帮助 输入文件记录中的数据项以及DB / 2列定义。

然而,这看起来很像数据转换问题。要检查的是:

  • 输入文件记录是否具有PIC 9(5).99之类的PICTURE / USAGE。关键点 是声明中有一个显式的小数点。如果你看看 使用文本编辑器(例如ISPF编辑器)输入文件,你会看到一些数字 比如12345.67。这些数字是显示格式。将它们视为文本。

  • DB / 2列定义。 DB / 2中的十进制数通常被声明为: DECIMAL(7,2)。以这种方式声明的数字由DB / 2以压缩十进制存储 格式。

输入文件中可能存在的显示格式编号与之不兼容 打包的十进制数字(苹果和橘子)。

为了说明这一点,请考虑以下一点COBOL程序:

IDENTIFICATION DIVISION.                          
PROGRAM-ID. EXAMPLE.                              
DATA DIVISION.                                    
WORKING-STORAGE SECTION.                          
01  A                  PIC 9(6).99.               
01  B                  PIC 9(6)V99 PACKED-DECIMAL.
PROCEDURE DIVISION.                               
    MOVE 123456.78 TO A                           
    DISPLAY 'A=' A                                
    MOVE A TO B                                   
    ADD 1 TO B                                    
    DISPLAY 'B=' B                                
    MOVE B TO A                                   
    DISPLAY 'A=' A                                
    GOBACK.                                       

变量A采用显示格式,带有显式小数点。你所能做的一切 为显示目的指定一个值。尝试执行类似ADD 1 TO A的操作 在编译错误中。

诀窍是将显示格式的数字转换为与DB / 2兼容的数字(例如,Packed Decimal)。 COBOL MOVE动词完成这项工作。声明一个兼容数据类型的新变量 到DB / 2使用的那个。上面的变量B就是这样一个变量。移动显示器 格式化变量到Packed Decimal变量,如:MOVE A TO B。 COBOL运行时执行此转换。

请注意,您现在可以向B添加内容。显示B(小数点消失 - 我会让你弄明白为什么)。然后将其移回显示格式,嘿,小数点 回来了。

DB / 2接收主机变量,因为它们没有转换。如果那个主变量没有 正确的数据格式,你会收到错误。

您可能需要执行以下操作:

  Read Record
  MOVE record display data (eg. `A`) to a DB/2 compatible field (eg. `B`)
  EXEC SQL
     INSERT INTO table (
         ...
         SALARY,
         ...)
       VALUES (
         ...
         :B,
         ...)
  END-EXEC.

答案 1 :(得分:0)

十进制字段类型以与DB2不兼容的格式保存值,并且需要在将新值释放到数据库之前进行转换(假设您具有对记录的写入或更新权限)。您可能需要将其移至PIC 9(6)V.99字段或类似字段,然后更新DB2记录。 COBOL是一种编程语言,具有用于操作的不同数据表示,而数据库用于将数据存储在记录中,并且可用的格式较少。