SQL FETCH,游标和RPG

时间:2016-05-16 20:38:47

标签: sql cursor fetch rpgle rpg

我不确定我的代码有什么问题,我正在尝试创建一个while循环,它将使用SQL中声明的游标获取字段(代码)中的下一个字符。目标是通过循环获得下一个匹配的字符。然后我想在循环结束时返回结果。如果没有完全匹配,目标是与代码进行部分匹配。我之前从未使用过游标,因此我尝试尽可能多地学习使用fetch和游标。

   EXEC SQL
   SELECT field FROM file
   WHERE  field = :code

   UNION

   DECLARE UserInput CURSOR FOR
   SELECT field FROM file
   WHERE  field LIKE '%' || :code || '%'
   ORDER BY field ASC

   OPEN UserInput
   FETCH NEXT FROM UserInput
   BEGIN
       DO WHILE <> %EOF 
             FETCH NEXT FROM UserInput
   END
   CLOSE UserInput
   DEALLOCATE UserInput;

1 个答案:

答案 0 :(得分:8)

哇......这里错了很多...... 快速浏览一下......

  1. 你试图将光标声明在错误的位置。
  2. %EOF()适用于RPG记录级别访问,您需要进行检查 SQLCODE或SQLSTATE
  3. FETCH OPEN都是SQL语句,需要位于EXEC SQL
  4. DEALLOCATE不需要
  5. 需要FETCH从光标到RPG变量的行
  6. 看看这段代码:

    EXEC SQL                                            
      DECLARE UserInput CURSOR FOR                      
        SELECT field FROM file                          
        WHERE  field = :code                            
        UNION                                           
        SELECT field FROM file                          
        WHERE  field LIKE '%' || :code || '%'           
        ORDER BY field ASC;                             
    EXEC SQL                                            
      OPEN UserInput;                                   
    --really should check SQLSTATE here too!            
    
    EXEC SQL                                            
      FETCH NEXT FROM UserInput INTO :MyRpgVar;         
    
    Dow SQLSTATE = '00000';                              
       --note 00000 = no errors or warning              
       --     02000 = no data                           
       <do somthing?>                                   
       EXEC SQL                                         
          FETCH NEXT FROM UserInput INTO :MyRpgVar;     
    ENDDO;                                              
    
    EXEC SQL                                            
      CLOSE UserInput; 
    

    我建议您阅读嵌入式SQL编程参考的RPGLE部分。