2017-01-25 74 views
0

我想傳遞一個數組DS作爲參數,但編譯時,我得到一個「RNF5343數組有太多省略索引」錯誤。如何傳遞數組數據結構作爲參數?

的陣列作爲

D PGM1   PI 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

D PGM1   PR 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

... 
Multiple row fetch using embedded SQL into RecieveVar 
... 

調用程序 「PGM2」

D PGM2   PR     ExtPgm('PGM1') 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

PGM1(RecieveVar: RecieveCount); 
的簡單定義名爲 「PGM1」 的

D ResponseData DS     Dim(100) Qualified 
D Field1      3 0 
D Field2      26 
    ... 
D Field45      26 

簡單的定義來定義相同的兩個程序

編譯調用程序「PGM2」時,RNF5343陣列中省略了太多索引發生。我不想僅傳遞數組的一個實例,而是傳遞整個事件。

我應該怎麼做才能在兩個程序之間傳遞數組數據結構作爲參數?

回答

0

我認爲你的例子中有一些錯別字......可能在你的實際代碼中。

以下(PGM2)對我來說編譯罰款:

H option(*nodebugio) debug(*INPUT) cvtopt(*datetime) 

D ResponseData DS     Dim(100) Qualified 
D Field1      3 0 
D Field2      26 
D Field45      26 

D PGM1   PR     ExtPgm('PGM1') 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

    /FREE 

    pgm1(ResponseData:10); 

    *INLR=*ON; 
    return; 
    /END-FREE   

雖然我會建議利用模板關鍵字

H option(*nodebugio) debug(*INPUT) cvtopt(*datetime) 

D ResponseData_t DS     template 
D Field1      3 0 
D Field2      26 
D Field45      26 

d myData   ds     likeds(ResponseData_t) dim(100) 

D PGM1   PR     ExtPgm('PGM1') 
D ReceiveVar       LikeDS(ResponseData_t) Dim(100) 
D ReceiveCount     10U 0 Const 

    /FREE 

    pgm1(myData:10); 

    *INLR=*ON; 
    return; 
    /END-FREE  
1

的如果你真的有在PGM1定義的PGM1和原型PGM2中PGM1原型的另一個定義,那麼我建議您將帶有EXTPGM關鍵字的原型移動到一個副本文件中,並將其複製到PGM1和PGM2中。有兩個獨立的原型會破壞編譯器確保參數正確傳遞的能力。在程序中更改原型太容易了,並忘記更改調用者中的所有原型。