我正在开发一个 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 命令上点击提示符,看看是否可以更改某些内容,但没有找到忽略十进制数据错误的方法。打印文件显示绝对记录中的标题,但相对记录中的数据不显示
忽略小数数据错误不是一个好主意,因此没有选择这样做。相反,您应该找出导致错误的原因并修复它。
如果您在调试中运行程序,它将在出现错误的语句处停止,然后您可以检查该语句上使用的变量。对于打包变量和分区变量,请查看十六进制值以查看哪个变量不正确。打包变量应具有十六进制形式 x'nnnnnF' 或 x'nnnnnD',其中 n 为 0-9,例如 x'12345F'。分区变量应采用十六进制形式 x'FnFnFnFn' 或 x'FnFnFnDn',例如 x'F1F2F3F4F5'。
可能
ZIP
包含非数字字符(无论如何我的猜测)。
用“D”回答十进制数据错误消息并查看格式化的转储。您将看到数据的十六进制解释。这使得找到罪魁祸首字段变得很容易。