2016-11-11 65 views
0

我寫了一個字帖(/ 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 
+0

顯示DS的定義 – Charles

+0

@Charles他們剛剛關閉了系統。明天早上我會添加它!你有什麼線索嗎?有問題的字段應該用VARYING關鍵字定義爲字符。這是一個DDS物理文件,不需要SQL: – LppEdd

+0

@Charles如果你的意思是本地數據結構,我添加了定義。 – LppEdd

回答

0
FILE_DS_NEW = FILE_DS_OLD; (1) 
FILE_DS_NEW.MYFIELD = 'MODIFIED'; (2) 
  1. 你將所有DS-數據從舊到新的DS。
  2. 您正在設置新ds的子字段。我敢打賭,你的myfield是char(8),所以你只需要改變新ds的前8個字節。

我猜你對varchar感到困惑。 Varchar數據類型只是將數據保存到字段限制的一種方法。這意味着如果你有一個varchar(10)並且只有'DATA'這個字段只使用6個字節。如果您將其更改爲varchar(1000),則該字段仍將只使用6個字節。

我希望這會有所幫助。

+0

DSPFFD顯示MYFIELD長度是256字節,它是一個可變長度字段。 那麼,如何用「修改」來更改字段的整個值? 我甚至嘗試過清除場地。 – LppEdd

+0

爲什麼要清除VARCHAR字段的整個值? 「整個值」只與當前長度一樣多。清除任何不止這些都會浪費處理器時間,並有效地刪除使字段VARCHAR而不是CHAR的任何值。 – user2338816