我正在编写一个cobol程序来读取PS文件并根据PS文件中设置的标志更新DB2表。文件中的一个字段在cobol程序中声明为十进制字段。但是当我尝试更新表中的那个字段时,它显示错误。我应该在表中声明相同的字段以及如何为字段编写更新语句?
字段名称是带有小数点的工资。
答案 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是一种编程语言,具有用于操作的不同数据表示,而数据库用于将数据存储在记录中,并且可用的格式较少。