RPG exec sql只工作一次

RPG exec sql只工作一次,sql,ibm-midrange,rpgle,Sql,Ibm Midrange,Rpgle,我用RPG IV自由格式编写程序,遇到了一个问题。我正在尝试使用以下命令执行sql语句: dcl-proc getRecord; dcl-pi *N int(5) end-pi; dcl-s rec int(5) inz(0); exec sql select max(SCORE) into :rec from SNK_HISC; return rec; END-PROC; 它只在编译后工作一次。也许我应该重置一些指示符或sql标志?在课程结束时,我使用: *inlr = *on;

我用RPG IV自由格式编写程序,遇到了一个问题。我正在尝试使用以下命令执行sql语句:

dcl-proc getRecord;
dcl-pi *N int(5) end-pi;
dcl-s rec int(5) inz(0);

exec sql
select max(SCORE) into :rec from SNK_HISC;

return rec;
END-PROC;   
它只在编译后工作一次。也许我应该重置一些指示符或sql标志?在课程结束时,我使用:

*inlr = *on;
return;    
在调用过程的地方:

   exfmt BACK;
   exfmt INFO;

   inital();


   dow run and alive;
     write MAINBOARD;
     READ(E) AKE_DSP;
     run = FKeyListener();
     alive = goForward();
   ENDDO;
   LSCORE = points;
   if points > getRecord();
     LRECORD = 'NEW RECORD!';

     exec sql
       insert into AKE_HISC( USID , SCORE) VALUES( :userID , :points);

   ENDIF;
   exfmt ENDING;


   *inlr = *on;
   return; 
在本程序中:

dcl-proc inital;
     snake(1).x = 5;
     snake(2).x = 5;
     snake(3).x = 5;
     snake(1).y = 5;
     snake(2).y = 6;
     snake(3).y = 7;
     direction.x = 1;
     direction.y = 0;
     SCORE = points;
     RECORD = getRecord();
     genSnack();
     refresh();
   END-PROC;
我使用此CL程序运行程序:

         PGM

         MONMSG     MSGID(CPF0000 MCH0000) EXEC(GOTO CMDLBL(END))

         OVRDSPF    FILE(AKE_DSP) DEV(*REQUESTER) WAITRCD(1)

         CALL       PGM(AKE_S)

 END:    
         DLTOVR     FILE(*ALL)
         MONMSG     MSGID(CPF0000)

         ENDPGM

问题不在于sql查询,而在于它所在的位置。我删除了过程getRecord()并使rec成为全局变量,sql查询被放在主循环中,仅此而已。

您所说的“它只工作一次”是什么意思?能否显示“Ctl Opt”语句以及对getRecord的过程调用?如果你注销你的会话并登录,它还能工作吗?现在我直到星期一才能访问我的ibmi,所以现在我无法检查它。但它只在编译后正常工作一次。程序的第二次执行将剩余数据插入rec变量。我使用ctl opt noactgrp或类似的东西。什么“剩余数据”?啊,我是说expectedProgram在注销/登录后工作