sql-cobol

13
QUICK GUIDE TO SQL AND COBOL WITH DB2 ON WINDOWS NT By Timothy Paul Cronan, Jennifer Kreie, and Lori Komp Leonard

Upload: donna-thomas

Post on 27-Oct-2015

21 views

Category:

Documents


1 download

DESCRIPTION

PPT

TRANSCRIPT

Page 1: SQL-COBOL

QUICK GUIDE TO SQL AND COBOL WITH DB2 ON

WINDOWS NT

By

Timothy Paul Cronan, Jennifer Kreie, and Lori Komp Leonard

Page 2: SQL-COBOL

Quick Guide to SQL and COBOL with DB2/2

• Embedding SQL statements in a COBOL program

• DATA DIVISION (WORKING-STORAGE SECTION)

• PROCEDURE DIVISION

• SQL in a PC Network Environment– Using Micro Focus COBOL with DB/2 - SQLPREP and SQLDEMO

SQLDEMO2

• SQLPREP.CBL program code

• SQLDEMO.CBL program code

• SQLDEMO2.CBL program code

• Tables in the database used in these exercises

Page 3: SQL-COBOL

Working Storage Section

If the database table ENROLL was defined as CREATE TABLE ENROLL (STUNUM SMALLINT, CLASSNAME CHAR[5], POSNUM CHAR[1]), the corresponding WORKING-STORAGE definition should be:

Page 4: SQL-COBOL

WORKING-STORAGE SECTION.

EXEC SQL BEGIN DECLARE SECTION END-EXEC.

01 STUDENTNUMBER PIC S9(3) COMP-3.

01 CLASS PIC X(5).

01 POSITION PIC X(1).

EXEC SQL END DECLARE SECTION END-EXEC.

EXEC SQL INCLUDE SQLCA END-EXEC.

Working Storage Section

Page 5: SQL-COBOL

NOTE 1: For each table that you want to access through the application program, you need to have COBOL variable-names defined as illustrated above for the table columns. These COBOL variable-names need to be enclosed within the statements EXEC SQL BEGIN DECLARE SECTION END-EXEC, and the EXEC SQL END DECLARE SECTION END-EXEC.

NOTE 2: You need one EXEC SQL INCLUDE SQLCA END-EXEC statement at the end.

NOTE 3: The INCLUDE SQLCA creates a communication area between SQL and COBOL, and defines any SQL variable. Numerous Statements are inserted as a result.

Page 6: SQL-COBOL

Procedure Division

WORKING-STORAGE SECTION.

EXEC SQL BEGIN DECLARE SECTION END-EXEC.

01 STUID PIC S9(3) COMP-3.

01 STUNAME PIC X(5).

01 STUMAJOR PIC X(1).

01 STUGRADELVL PIC X(2).

01 STUAGE PIC X(2).

EXEC SQL END DECLARE SECTION END-EXEC.

EXEC SQL INCLUDE SQLCA END-EXEC.

Page 7: SQL-COBOL

PARAGRAPH-1.

DISPLAY 'ENTER THE ID NUMBER OF THE STUDENT'.

ACCEPT SIDIN FROM CONSOLE.

EXEC SQL

SELECT SID, NAME, MAJOR, GRADELVL, AGE

INTO :STUID, :STUNAME, :STUMAJOR, :STUGRADELVL, :STUAGE

FROM STUDENT

WHERE SID = :SIDIN

END-EXEC.

Procedure Division

Page 8: SQL-COBOL

Cursor

If more than one row is to be extracted from a table, the way COBOL source code is written differs from the earlier illustration. One difference is that the data retrieved from the SQL query returns a table and, therefore, a "CURSOR" is needed.

Page 9: SQL-COBOL

EXEC SQL

DECLARE CURSORNAME CURSOR FOR

SELECT ...................

FROM ..................... Usual SQL statements.

WHERE ....................

END-EXEC.

Cursor

Page 10: SQL-COBOL

Cursor Example

PARAGRAPH-1.

DISPLAY 'ENTER DESIRED COURSE NAME'.

ACCEPT CLASSNAMEIN FROM CONSOLE.

EXEC SQL

DECLARE RESULT CURSOR FOR

SELECT NAME FROM STUDENT

WHERE SID IN (SELECT STUNUM FROM ENROLL

WHERE CLASSNAME = :CLASSNAMEIN)

END-EXEC.

PERFORM PARAGRAPH-2.

Page 11: SQL-COBOL

Cursor

• This SELECT extracts all rows that meet the condition to a table and assigns a cursor named RESULT to that extracted table.

• However, instead of opening and closing a data file, the cursor defined in the above SELECT statement is opened and closed. Also, instead of using the usual READ statement, a FETCH statement is used.

Page 12: SQL-COBOL

Fetch

EXEC SQL OPEN CURSORNAME END-EXEC.

EXEC SQL FETCH CURSORNAME INTO :COBOL-VARIABLE END-EXEC.

Page 13: SQL-COBOL

Since the FETCH substitutes a READ, this FETCH statement has to be executed until SQLCODE = 100 is returned by SQL. This return code can be viewed as equivalent to the usual END-OF-FILE marker.

PARAGRAPH-2.

EXEC SQL OPEN RESULT END-EXEC.

PERFORM FETCH-PARAGRAPH.

PERFORM PROCESS-LOOP UNTIL SQLCODE = 100.

EXEC SQL CLOSE RESULT END-EXEC.

FETCH-PARAGRAPH.

EXEC SQL

FETCH RESULT INTO :CLASSNAMEIN

END-EXEC.

PROCESS-LOOP.

:

: Statements to process the names of students

: who are enrolled in the specified class.

:

DISPLAY CLASSNAMEIN

PERFORM FETCH-PARAGRAPH.