为什么当我运行这个 SQLRPGLE 程序时会出现 Decimal 数据错误

问题描述 投票:0回答:2

我正在开发一个 sqlrpgle 程序,当我运行时,我收到消息:发生十进制数据错误 (C G D F)

**FREE
//******************************************************************/
//Program: States
// Written by: Victor Hernandez
// Date: 1/24/2024
// Purpose: This program Is a lab that demonstrates embedded SQL by reading
// the currency file in FLIGHT2023
// ***************************************************************/

//--------------------------------Control Options
ctl-opt Option(*NODEBUGIO) DFTACTGRP(*NO);

//--------------------------------Declare Files
dcl-f  STATES Printer usage(*Output) oflind(EndOfPage);

//--------------------------------Constants
dcl-c EndOfFile '02000';

//--------------------------------Stand Alone Variables
dcl-s EndOfPage Ind Inz(*on);

dcl-ds ZIPDS Extname('ZIPPF') end-ds;


//--------------------------------Main

EXEC SQL DECLARE cur CURSOR FOR
  SELECT * FROM ZIPPF
   FOR read only;

EXEC SQL OPEN cur;

dou SQLSTATE = EndOfFile;
 EXEC SQL FETCH cur INTO :ZIP, :CITY, :STATE;

 Exsr Overflow;

 WRITE DETAILS;


ENDDO;

EXEC SQL CLOSE cur;

*INLR = *ON;
RETURN;

 BEGSR OVERFLOW;
   IF ENDOFPAGE;
     WRITE HEADER;
     ENDOFPAGE =*OFF;
   ENDIF;
 ENDSR;       

我尝试在 CRTSQLRPGI 命令上点击提示符,看看是否可以更改某些内容,但没有找到忽略十进制数据错误的方法。打印文件显示绝对记录中的标题,但相对记录中的数据不显示

db2 rpgle
2个回答
1
投票

忽略小数数据错误不是一个好主意,因此没有选择这样做。相反,您应该找出导致错误的原因并修复它。

如果您在调试中运行程序,它将在出现错误的语句处停止,然后您可以检查该语句上使用的变量。对于打包变量和分区变量,请查看十六进制值以查看哪个变量不正确。打包变量应具有十六进制形式 x'nnnnnF' 或 x'nnnnnD',其中 n 为 0-9,例如 x'12345F'。分区变量应采用十六进制形式 x'FnFnFnFn' 或 x'FnFnFnDn',例如 x'F1F2F3F4F5'。


0
投票

可能

ZIP
包含非数字字符(无论如何我的猜测)。 用“D”回答十进制数据错误消息并查看格式化的转储。您将看到数据的十六进制解释。这使得找到罪魁祸首字段变得很容易。

© www.soinside.com 2019 - 2024. All rights reserved.