ushidayの日記

主に「IBMi」のメモに・・・

IBMDB2iストレージエンジンその3

RedBookの続きをやります。phpMyAdminからSQLを投げてデータが、AS/400に書かれるのは確認できたので、4.2.3項にある「Accessing MySQL data from RPG with native access」をやってみます。SQL-RPGの解説もありますが、実はよく知りません。自分は、Native-RPGが大好きなんで。

注記みたいなのが書いてあります。

  1. PF,LFはMySQLのEngineで、Table,Indexを作ってね
  2. BLOBなどのLarge Objectは、Native-RPGからアクセス出来ないよ、でもSQL-RPGならOKだよ
  3. F仕様書でダブルクウォートをサポートして無いから、ファイルはQTEMP等の一時エリアに、別名でコピーして、使いましょう。一時ファイルでプログラムをコンパイル後、一時ファイルは削除しましょう。実行時はOVRDBFで実ファイルにオーバーライドしましょう。

RPGでレコード追加のテスト

H DATEDIT(*YMD)                                                        
H COPYRIGHT('(C) CHUBU SYSTEM CO,.LTD 1996 - ')                        
 /IF DEFINED(*CRTBNDRPG)                                               
H DFTACTGRP(*NO) ACTGRP(*NEW)                                          
 /ENDIF                                                                
F* 社員マスター                                                        
FSHAIN     UF A E           K DISK    RENAME(SHAIN :SHAINR)            
D*-----<< メインプロシージャ・プロトタイプ定義 >>-----*                
DDB2I001          PR                                                   
DDB2I001          PI                                                   
D*-----<< サブプロシージャ・プロトタイプ >>-----*                      
D*-----<< サブプロシージャ定義 >>-----*                                
D SAVE            PR                                                   
D******************************************************************    
D*                                                                     
C*- -----------------------------------------------------------------* 
C*- --------<<  FREE FORMAT                                 >>-------*
C*- -----------------------------------------------------------------*
 /FREE                                                                
                                                                      
         SAVE()                                      ;                
                                                                      
      *INLR = *ON ;                                                   
      RETURN      ;                                                   
                                                                      
 /END-FREE                                                            
                                                                      
P****************************************************************     
P** < SAVE         > :                                         **     
P****************************************************************     
P SAVE            B                                                   
D SAVE            PI                                                  
D*< 変数 >                                                            
D UPD_RECORD    E DS                  EXTNAME(SHAIN :*INPUT)   
D                                     QUALIFIED                
D WRT_RECORD    E DS                  EXTNAME(SHAIN :*OUTPUT)  
D                                     QUALIFIED                
D SHAIN_KEY     E DS                  EXTNAME(SHAIN :*KEY)     
D                                     QUALIFIED                
 /FREE                                                         
         // 最終レコード取得                                   
         SHAIN_KEY.CODE = *HIVAL ;                             
         SETLL %KDS(SHAIN_KEY) SHAINR ;                        
                                                               
         READP(N) SHAINR UPD_RECORD ;                          
         CLEAR WRT_RECORD        ;                             
         IF %EOF ;                                             
             WRT_RECORD.CODE = 1 ;                             
         ELSE    ;                                             
             WRT_RECORD.CODE = UPD_RECORD.CODE + 1 ;           
         ENDIF   ;                                                
                                                                  
         WRT_RECORD.KANA = ' カタカナ ' + %CHAR(WRT_RECORD.CODE); 
         WRT_RECORD.NAME = ' 名前 ' + %CHAR(WRT_RECORD.CODE);     
         WRT_RECORD.C_DATE = %DEC(%DATE()) ;                      
         WRT_RECORD.C_TIME = %DEC(%TIME()) ;                      
                                                                  
         WRITE SHAINR WRT_RECORD ;                                
                                                                  
         RETURN                                                   
                                                   ;              
 /END-FREE                                                        
P                 E                                               

CALL DB2I001を実行

iナビで確認

phpMyAdminで確認

無事レコードが追加されました。