2013-06-10 3 views
1

Следующий код, скомпилированный под CRTBNDRPG, но при запуске он застрял только на одном вводе-выводе.Программа IBM i RPG ничего не делает

Все, что мне нужно сделать - все наши таблицы имеют номер порядка 8, но этот файл имеет его как 10. Поэтому я просто создаю 2 поля, в которых мне нужно сделать 8, а другое нормально, так как это является. ЛЮБЫЕ идеи, почему эта небольшая программа не снимается?

FMFHHMH IF E    DISK          
F* output file               
FMFHHMHPK O A E    DISK          
D*EXTSHP   S    13 6         
D                  
C                  
C     READ  MFHHMH         
C     Dow  NOT %EOF(MFHHMH)       
C     iF  %found         
c     MOVE  MHORDR  MHORDp      
c     MOVE  MHZONE  MHZONE      
C     WRITE  MFHHMHP         
C     READ  mfhhmh         
C     End            
C     END            
C     SETON          LR 
+2

никогда не используйте только 'END' закончить командную группу, вместо того, чтобы использовать конкретную команду торцевую таких как 'ENDIF',' ENDDO' и т. д. –

ответ

12

Вы создали бесконечный цикл, в котором NOT %EOF является ИСТИНА но %FOUND является FALSE.

Примечание к документации для %FOUND о том, что оно не отражает статус для операции READ.

Код IF условный не нужен в вашем коде, поскольку цикл DOW достаточен, чтобы гарантировать, что у вас есть запись.

3

Это правильно, что говорил Джеймс в первый ответ .. с оп-кодом READ вы можете использовать IF% EOF, но вы не можете использовать IF% FOUND .... Использование% FOUND с ЦЕПИ

You можно также использовать SQL заявление, если обе таблицы имеют одинаковую структуру

INSERT INTO MFHHMHPK (выберите * из MFHHMH где whateveryouwant)

+1

Да, если возможно, SQL следует использовать вместо этого, поскольку som Это простое может быть ** MUCH ** быстрее, если только в db-слое. –

+0

Давайте посмотрим ... 1 оператор SQL, или 12 строк RPG. SQL - лучший выбор. – WarrenT

Смежные вопросы