rs6000のWiki - SQLRPGLE カーソルを使わない動的SQL

SQLRPGLE カーソルを使わない動的SQL


http://www.e-bellnet.com/technical/hint/0910/hint_...
の記事のV5R2版と思ってください。
解説はブログを参照してください。

静的SQLのサンプル

IBM503R.SQLRPGLE
     H DFTACTGRP(*NO) ACTGRP(*CALLER)
      *
     D LASTNAME        S             17A   INZ(*BLANK)
     C*
     C     *ENTRY        PLIST
     C                   PARM                    EMPNO             6
     C/EXEC SQL
     C+   SELECT LASTNAME INTO :LASTNAME
     C+   FROM EMPLOYEE WHERE EMPNO = :EMPNO
     C/END-EXEC
     C/EXEC SQL
     C+   WHENEVER NOT FOUND GOTO EOF
     C/END-EXEC
     C*
      /Free
            dsply ('EMPNO=' + EMPNO + ' LASTNAME=' + LASTNAME ) ;
      /End-Free
     C     EOF           TAG
     C*
     C                   SETON                                        LR
     C                   RETURN
ライブラリーリストにいつものSAMPLEDBを追加します。
コンパイルはPDMで15

カーソルを使わない動的SQLのサンプル

IBM504R.SQLRPGLE
     H DFTACTGRP(*NO) ACTGRP(*CALLER)
      *
     D LASTNAME        S             17A   INZ(*BLANK)
     D query           S           1000A   varying
     C*
     C     *ENTRY        PLIST
     C                   PARM                    EMPNO             6
      /Free
           query = 'values(select LASTNAME from employee where EMPNO = ? ' +
                        ' ) into ? ' ;
      /End-Free
     C/EXEC SQL
     C+   prepare Stmp from :query
     C/END-EXEC
     C/EXEC SQL
     C+   execute Stmp Using :EMPNO , :LASTNAME
     C/END-EXEC
     C/EXEC SQL
     C+   WHENEVER NOT FOUND GOTO EOF
     C/END-EXEC
     C*
      /Free
            dsply ('EMPNO=' + EMPNO + ' LASTNAME=' + LASTNAME ) ;
      /End-Free
     C     EOF           TAG
     C*
     C                   SETON                                        LR
     C                   RETURN
コンパイルはPDMで15

実行結果

4 > CALL IBM503R '000010'
    DSPLY  EMPNO=000010 LASTNAME=HAAS
4 > CALL IBM503R '000020'
    DSPLY  EMPNO=000020 LASTNAME=THOMPSON
4 > CALL IBM504R '000050'
    DSPLY  EMPNO=000050 LASTNAME=GEYER