DFU, Query, SQL

20. どのような SQL文でも実行可能な SQLサーバーの作成

OS/400 には RUNSQLSTM という SQL 実行コマンドが用意されているが

  • ソースファイルへの SQL文の登録が必要
  • SELECT 文が実行できない。

という 理由から STRQMQRY に代わる機能は提供していない。

それでは 汎用的に SQL 文がバッチで実行できる SQL パッケージを紹介しよう。

次の RPG SQL-パッケージは 実際 PANEL-WORKER Chicago の Excel アップロード・サーバーの中で

PC クライアントからの SQL 要求文を処理している実物である。

0001.00 H DFTNAME(RUNSQLCMD) DATEDIT(*YMD/)                          
0002.00 F********** RUN SQL COMMAND *************************************
0003.00 FSTR5000   IF   E             DISK    USROPN                
0004.00 F*****************************************************************
0005.00 D MSGID           DS                                       
0006.00 D  SQL                    1      3                        
0007.00 D  SQLCD                  3      7  0                        
0008.00 D SPCBIN          DS                                       
0009.00 D  CMPBIN                 1      4B 0                      
0010.00 D  CMPCHR                 1      4                        
0011.00 C*----------------------------------------------------+   
0012.00 C*    パラーメータの受取り                                   
0013.00 C*----------------------------------------------------+   
0014.00 C     *ENTRY        PLIST                               
0015.00 C                   PARM                    STRING      
0016.00 C                   PARM                    MSGID        
0017.00 C                   PARM                    MSGDTA           80
0018.00 C                   PARM                    RESULT            4 
0019.00 C*----------------------------------------------------+       
0020.00 C/EXEC SQL WHENEVER SQLERROR GO TO ERROR      
0021.00 C/END-EXEC                                               
0022.00 C/EXEC SQL                                             
0023.00 C+   EXECUTE IMMEDIATE :STRING                          
0024.00 C/END-EXEC                                              
0025.00 C*                                                          
0026.00 C                   Z-ADD     SQLER6        CMPBIN  
0027.00 C                   MOVE      CMPCHR        MSGID   
0028.00 C                   MOVE      'SQL'         SQL         
0029.00 C                   MOVEL     SQLERM        MSGDTA  
0030.00 C                   MOVE      'CMOK'        RESULT   
0031.00 C                   GOTO      END                   
0032.00 C     ERROR         TAG                                
0033.00 C                   Z-SUB     SQLCOD        SQLCD      
0034.00 C                   MOVE      'SQL'         SQL        
0035.00 C                   MOVEL     SQLERM        MSGDTA      
0036.00 C                   MOVE      'ERR_'        RESULT      
0037.00 C     END           TAG                                             
0038.00 C                   SETON                                        LR
0039.00 C                   RETURN                             
0040.00 C******************************************************    
0041.00 C     *INZSR        BEGSR 
0042.00 C******************************************************     
0043.00 C*  初期 CYCLE のみの実行                                   
0044.00 CSR                 GOTO      INZEND                          
0045.00 CSR                 OPEN      STR5000                              99
0046.00 CSR                 READ      STR5000                              50
0047.00 CSR                 CLOSE     STR5000                              99
0048.00 CSR   INZEND        ENDSR