RPG - 将DS作为参数传递给过程

时间:2016-11-11 20:06:08

标签: ibm-midrange procedure rpgle rpg

我写了一个有这个界面的副本(/ 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

1 个答案:

答案 0 :(得分:0)

FILE_DS_NEW = FILE_DS_OLD;   (1)
FILE_DS_NEW.MYFIELD = 'MODIFIED';  (2)
  1. 您正在将所有ds数据从旧的ds移动到新的ds。
  2. 您正在设置新ds的子字段。我敢打赌myfield是char(8),所以你只是改变了新ds的前8个字节。
  3. 我猜你对varchar感到困惑。 Varchar数据类型只是将数据保存到字段限制的一种方法。这意味着如果你有一个varchar(10)和'DATA'这个字段只使用6个字节。如果将其更改为varchar(1000),则该字段仍将仅使用6个字节。

    我希望这会有所帮助。