RPG - 传递DS作为参数传递给程序
我写了一个字帖(/ COPY)程序具有该接口:RPG - 传递DS作为参数传递给程序
DCL-PI *N VARCHAR(5000);
FILE_NAME CHAR(10) CONST;
DS_OLD VARCHAR(5000) CONST;
DS_NEW VARCHAR(5000) CONST;
END-PI;
此过程由本示例程序调用。 FILE_DS_ *是具有PFFILE定义的外部DS。
EXEC SQL SELECT * INTO :FILE_DS_OLD FROM PFFILE FETCH FIRST 1 ROW ONLY;
FILE_DS_NEW = FILE_DS_OLD;
FILE_DS_NEW.MYFIELD = 'MODIFIED';
RESULT = MYPROC('PFFILE':FILE_DS_OLD:FILE_DS_NEW);
我修改字段定义为VARCHAR其原始值,例如:'PEN IS ON THE TABLE'
奇怪的是,在我有程序的入口点在FILE_DS_NEW DS上获得此值:
'MODIFIEDN THE TABLE'
我发疯了,但找不到原因!任何想法?
DS是如何定义的:
D FILE_DS_OLD E DS EXTNAME(PFFILE) QUALIFIED INZ
D FILE_DS_NEW E DS EXTNAME(PFFILE) QUALIFIED INZ
FILE_DS_NEW = FILE_DS_OLD; (1)
FILE_DS_NEW.MYFIELD = 'MODIFIED'; (2)
- 你将所有DS-数据从旧到新的DS。
- 您正在设置新ds的子字段。我敢打赌,你的myfield是char(8),所以你只需要改变新ds的前8个字节。
我猜你对varchar感到困惑。 Varchar数据类型只是将数据保存到字段限制的一种方法。这意味着如果你有一个varchar(10)并且只有'DATA'这个字段只使用6个字节。如果您将其更改为varchar(1000),则该字段仍将只使用6个字节。
我希望这会有所帮助。
DSPFFD显示MYFIELD长度是256字节,它是一个可变长度字段。 那么,如何用“修改”来更改字段的整个值? 我甚至尝试过清除场地。 – LppEdd
为什么要清除VARCHAR字段的整个值? “整个值”只与当前长度一样多。清除任何不止这些都会浪费处理器时间,并有效地删除使字段VARCHAR而不是CHAR的任何值。 – user2338816
显示DS的定义 – Charles
@Charles他们刚刚关闭了系统。明天早上我会添加它!你有什么线索吗?有问题的字段应该用VARYING关键字定义为字符。这是一个DDS物理文件,不需要SQL: – LppEdd
@Charles如果你的意思是本地数据结构,我添加了定义。 – LppEdd