RPG - 将 DS 作为参数传递给过程
RPG - passing DS as arguments to procedure
我写了一个copybook(/COPY)程序,有这个接口:
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。
- 您正在设置新 ds 的子字段。我打赌你的 myfield 是 char(8),所以你只是改变了新 ds 的前 8 个字节。
我猜您对 varchar 感到困惑。 Varchar 数据类型只是一种将数据保存到字段限制的方式。这意味着如果你有一个 varchar(10) 并且只有 'DATA' 这个字段只使用 6 个字节。如果将其更改为 varchar(1000),该字段仍将仅使用 6 个字节。
希望对您有所帮助。
我写了一个copybook(/COPY)程序,有这个接口:
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。
- 您正在设置新 ds 的子字段。我打赌你的 myfield 是 char(8),所以你只是改变了新 ds 的前 8 个字节。
我猜您对 varchar 感到困惑。 Varchar 数据类型只是一种将数据保存到字段限制的方式。这意味着如果你有一个 varchar(10) 并且只有 'DATA' 这个字段只使用 6 个字节。如果将其更改为 varchar(1000),该字段仍将仅使用 6 个字节。
希望对您有所帮助。