Figure 15: Block insert examples in RPG

     Demprow1          DS                      QUALIFIED DIM(3)
     D age                            4B 0     INZ(0)
     D empname                       10A       INZ('TEST INZ')
     D dept                           9B 0     INZ(111)
     D*
     D whereage        S              9B 0 INZ(25)
     D hvbump          S              9B 0 INZ(1)
     D hvres           S              9B 0 INZ(0)
     D numrows         S              9B 0 INZ(3)
     D ind1            S              4B 0 INZ(0)
     D ind2            S              4B 0 INZ(0)
     D ind3            S              4B 0 INZ(0)
     D*
     C
     C*
      /free
        EVAL      emprow1(1).empname='TOM'  ;
        EVAL      emprow1(2).empname='MARY' ;
        EVAL      emprow1(3).empname='JOE'  ;
        EVAL      emprow1(1).age=25   ;
        EVAL      emprow1(2).age=50   ;
        EVAL      emprow1(3).age=21   ;
        EVAL      emprow1(1).dept=123 ;
        EVAL      emprow1(2).dept=234 ;
        EVAL      emprow1(3).dept=345 ;
        //
        EXEC SQL WHENEVER SQLERROR GOTO FAILTAG ;
        //
        EXEC SQL
          DECLARE C1 CURSOR FOR
          SELECT age + :hvbump :ind1 FROM FINAL TABLE (
            INSERT INTO table1 :numrows ROWS 
              VALUES( :emprow1 )) AS X
              WHERE age >= :whereage :ind3  ;
        //
        // Fetch result row 
        EXEC SQL OPEN C1 ;
        EXEC SQL FETCH C1 INTO :hvres :ind2 ;
        dsply ('Result: ' + %char(hvres) ) ;
        EXEC SQL CLOSE C1 ;
        //
      /end-free
     C     FAILTAG       TAG
     C                   SETON                                        LR