タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【AS400】SQLRPGLE-RPGでSQL文を使う

RPGにてシンプルなSQL文を書く機会があったので、簡単なサンプルを書いてみました。

SQLRPGLEサンプル

     D MAIN            PR                  EXTPGM('SAMPLE28')
     D                                7P 0                   
     D*                                                      
     D MAIN            PI                                    
     D  P@QCNT                        7P 0                   
     D*                                                      
     D C@QCNT          S              7P 0                   
     D*                                                      
     D*******************************************************
     D*  MAIN                                                
     D*******************************************************
      /FREE                                                  
          //** SQL OPTIONS **                                
           EXEC SQL                                          
             SET OPTION COMMIT = *NONE;                      
                                                             
           EXEC SQL                                          
             DECLARE CSR CURSOR FOR                          
                  SELECT COUNT(1)                            
                    FROM EMPLOYEES;       
           EXEC SQL                       
             OPEN CSR;                    
                                          
             IF SQLCODE = *ZERO;          
                 EXEC SQL                 
                   FETCH CSR INTO :C@QCNT;
                                          
                 DSPLY C@QCNT;            
                 P@QCNT = C@QCNT;         
                                          
                 EXEC SQL                 
                   CLOSE CSR;             
             ELSE;                        
                 DSPLY 'SQL ERROR !';     
                 DSPLY SQLCODE;           
                 P@QCNT = *ALL'9';        
             ENDIF;                       
                                          
           *INLR = *ON;                   
           RETURN;  
      /END-FREE     

実行結果(成功時)

> CALL PGM(TIGEROBJ/SAMPLE28) PARM(X'0000000F')    
  DSPLY        2                                   

SQLCODE = 0は「操作は正常に実行されました。警告または例外状態は発生していません」とのことで、SQLの結果を画面に表示できました。

実行結果(失敗時。SQL文で存在しないテーブル名を指定)

 
> CALL PGM(TIGEROBJ/SAMPLE28) PARM(X'0000000F')     
  *LIBL のタイプ *FILE の EMPLOYEEX が見つからない。
  DSPLY  SQL ERROR !                                
  DSPLY         204-                                                      

SQLCODE = -204は「未定義のオブジェクトまたは制約名が見つかりました」というエラーになります。