SQL$HELP72.HLB  —  EXECUTE_IMMEDIATE, Example
    Example 1: Executing an INSERT statement with the EXECUTE
    IMMEDIATE statement

    This COBOL program illustrates using the EXECUTE IMMEDIATE
    statement to prepare and execute a dynamic INSERT statement.
    Compare this example with the example for the EXECUTE statement
    (see the EXECUTE), which uses an INSERT statement with parameter
    markers and displays the result of the insert operation.

    IDENTIFICATION DIVISION.
    PROGRAM-ID.   EXECUTE_IMMEDIATE_EXAMPLE.
    *
    * Illustrate EXECUTE_IMMEDIATE with a dynamic INSERT statement.
    *
    DATA DIVISION.

    WORKING-STORAGE SECTION.

    * Variable for DECLARE SCHEMA:
    01 FILESPEC     PIC X(20).

    * Variables to hold values for
    * storage in EMPLOYEES:
    01 EMP_ID       PIC X(5).
    01 FNAME        PIC X(10).
    01 MID_INIT     PIC X(1).
    01 LNAME        PIC X(14).
    01 ADDR_1       PIC X(25).
    01 ADDR_2       PIC X(25).
    01 CITY         PIC X(20).
    01 STATE        PIC X(2).
    01 P_CODE       PIC X(5).
    01 SEX          PIC X(1).
    01 BDATE        PIC S9(11)V9(7) COMP.
    01 S_CODE       PIC X(1).

    * Indicator variables for retrieving
    * the entire row, including columns we
    * do not assign values to, from
    * the EMPLOYEES table:
    01 EMP_ID_IND   PIC S9(4) COMP.
    01 FNAME_IND    PIC S9(4) COMP.
    01 MID_INIT_IND PIC S9(4) COMP.
    01 LNAME_IND    PIC S9(4) COMP.
    01 ADDR_1_IND   PIC S9(4) COMP.
    01 ADDR_2_IND   PIC S9(4) COMP.
    01 CITY_IND     PIC S9(4) COMP.
    01 STATE_IND    PIC S9(4) COMP.
    01 P_CODE_IND   PIC S9(4) COMP.
    01 SEX_IND      PIC S9(4) COMP.
    01 BDATE_IND    PIC S9(4) COMP.
    01 S_CODE_IND   PIC S9(4) COMP.

    * Buffer for error handling:
    01 BUFFER       PIC X(300).
    01 LEN          PIC S9(4) USAGE IS COMP.

    * 01 disp_sqlcode       pic s9(9) sign leading separate.

    * Load definition for SQL Communication Area (SQLCA):
    EXEC SQL        INCLUDE SQLCA END-EXEC.

    ********************************************************************
    *
    *               P R O C E D U R E    D I V I S I O N
    *
    ********************************************************************
    PROCEDURE DIVISION.
    START-UP.

    * Assign value to FILESPEC:
            MOVE "SQL$DATABASE" TO FILESPEC

    * Declare the schema:
            EXEC SQL DECLARE SCHEMA RUNTIME FILENAME :FILESPEC
            END-EXEC

    *               Use an EXECUTE IMMEDIATE statement
    *               to execute an INSERT statement:
                EXEC SQL EXECUTE IMMEDIATE
                "INSERT INTO EMPLOYEES
    -               "(EMPLOYEE_ID,FIRST_NAME,LAST_NAME,CITY)
    -               "VALUES ('99999','Les','Warton','Hudson')"
                END-EXEC
                PERFORM CHECK.

            PERFORM FETCHES.

    EXEC SQL EXECUTE IMMEDIATE 'ROLLBACK' END-EXEC.
            PERFORM CHECK.

            DISPLAY "Rolled back changes.  All done.".

    CLEAR-IT-EXIT.
            EXIT PROGRAM.

    FETCHES.
            DISPLAY "Here's the row we stored:"

            EXEC SQL PREPARE STMT FROM
            'SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID = "99999"'
            END-EXEC
            EXEC SQL DECLARE C CURSOR FOR STMT END-EXEC

            EXEC SQL OPEN C END-EXEC
    *       Clear values in host language
    *       variables in case new values
    *       from the table are null:
            MOVE SPACES TO EMP_ID
            MOVE SPACES TO FNAME
            MOVE SPACES TO MID_INIT
            MOVE SPACES TO LNAME
            MOVE SPACES TO ADDR_1
            MOVE SPACES TO ADDR_2
            MOVE SPACES TO CITY
            MOVE SPACES TO STATE
            MOVE SPACES TO P_CODE
            MOVE SPACES TO SEX
            MOVE ZERO TO BDATE
            MOVE SPACES TO S_CODE

            EXEC SQL FETCH C INTO
                    :EMP_ID:EMP_ID_IND,
                    :LNAME:LNAME_IND,
                    :FNAME:FNAME_IND,
                    :MID_INIT:MID_INIT_IND,
                    :ADDR_1:ADDR_1_IND,
                    :ADDR_2:ADDR_2_IND,
                    :CITY:CITY_IND,
                    :STATE:STATE_IND,
                    :P_CODE:P_CODE_IND,
                    :SEX:SEX_IND,
                    :BDATE:BDATE_IND,
                    :S_CODE:S_CODE_IND
            END-EXEC

            DISPLAY EMP_ID," ",
                    FNAME," ",
                    MID_INIT," ",
                    LNAME," ",
                    ADDR_1," ",
                    ADDR_2," ",
                    CITY," ",
                    STATE," ",
                    P_CODE," ",
                    SEX," ",
                    BDATE," ",
                    S_CODE.

            PERFORM CHECK.
            EXEC SQL CLOSE C END-EXEC.

    CHECK.
            IF SQLCODE NOT = 100 AND SQLCODE NOT = 0
                    DISPLAY "Error: SQLCODE = ", SQLCODE
                CALL "SQL$GET_ERROR_TEXT" USING
                    BY DESCRIPTOR BUFFER,
                    BY REFERENCE LEN
                DISPLAY BUFFER(1:LEN)
            END-IF.
Close Help