我写了一个有这个界面的副本(/ 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
答案 0 :(得分:0)
FILE_DS_NEW = FILE_DS_OLD; (1)
FILE_DS_NEW.MYFIELD = 'MODIFIED'; (2)
我猜你对varchar感到困惑。 Varchar数据类型只是将数据保存到字段限制的一种方法。这意味着如果你有一个varchar(10)和'DATA'这个字段只使用6个字节。如果将其更改为varchar(1000),则该字段仍将仅使用6个字节。
我希望这会有所帮助。