2010-06-11 3 views
3

여기 내 상황입니다 : 나는이처럼 보이는 프로그램 A가 :RPG 컴파일러는 유형 S를 유형 P로 변환합니까?

 
Fmfile  IF E   K DISK USROPN 
d grue   s     like(dhseqn) 
d 
C  *ENTRY  PLIST 
C     PARM     grue 
c     open  mfile 
c*** do something with grue 
c     close  mfile 
c     eval  *inlr = *on 

dhseqn는 2,0 S 필드입니다.

 
*RNF7031 DHSEQN   P(2,0)     000200  1000002D 
      GRUE    P(2,0)     000200D  000500M  000700  000800M 
          BASED(_QRNL_PRM+) 

내가 2,0 S로 선언 된 매개 변수를 사용하여 프로그램 A를 호출 할 때, 나는 소수점 데이터 오류가 :

컴파일 목록

나에게 이것을 보여줍니다.

예상 되나요? 아니면이 문제가 컴파일러 버그입니까?

답변

5

RPG 컴파일러 (ILE 이전)는 데이터베이스 필드를 packed로 변환합니다. 때로는 그렇지 않을 수도 있습니다. 예를 들어, 존 (zoned) 파일 필드는 데이터 구조에서 사용하면 존 (zoned) 상태를 유지하지만, 사용자가 포장하지 않는 동일한 파일의 존 (zones) 필드는 존속됩니다.

정말로 필요한 경우 파일 필드를 좋아하는 경우 더미 데이터 구조를 정의하여 영역을 유지하십시오.

입력 매개 변수가 수정되지 않은 경우 프로그램의 프로토 타입에 Const 키워드로 정의하면 형식이 자동으로 변환되므로 식과 상수를 수락 할 수도 있습니다!

프로 시저 프로토 타입 및 자동 변환에서 Const 사용에 관해서는 정말 좋은 article입니다.

0

grue의 정의에서 's'는 데이터 유형을 나타내지 않고 오히려이를 '독립형'필드로 정의합니다. grue의 데이터 유형은 컴파일 목록이 P (2,0)로 표시되는 LIKE (dhseqn)로 지정됩니다.

+0

실제 질문은 '데이터베이스가 S로 표시되면 DHSEQN이 P로 표시되는 이유는 무엇입니까?' (ASalazar가 답변을 제공했다) – Derek

+0

@Derek RPG 참조는이 시점에서 매우 불분명하며 LIKE()가 사용될 때 차이점을 암시하는 'LIKE 키워드가 지정되지 않은 경우'만 정의한다. 그러나이 경우 실제로 동일합니다. – user2338816