You are on page 1of 58

DB2

Session Plan

• SPUFI Hands On

• Introduction to Embedded SQL

• DCLGEN Hands On

• SQLCA Copy Book and its Use

• Single Row Manipulation

• Multiple Row Manipulation

• Cursors

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


2
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
3
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
4
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
5
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
6
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
7
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
8
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
9
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
10
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
11
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
12
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
13
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
14
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
15
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
16
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
17
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
18
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
19
Technologies Ltd Version No:2.0a
Embedded SQL

• Embedded SQL refers to the use of standard SQL statements within a


high-level language program such as COBOL, PL1, C, PASCAL, etc,.

• The high level language is called Host language

• Embedded SQL statements are preprocessed by SQL Pre processor


before the application program is compiled

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


20
Technologies Ltd Version No:2.0a
Embedded SQL

• Embedded SQL syntax is almost same as the SQL syntax used in interactive
mode.

• The output of a query is directed to a pre-defined set of variables instead of the


terminal.

• These variables are defined in the host language and are referred to as the
host variables.

• An additional INTO clause is placed after the SQL SELECT statement.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


21
Technologies Ltd Version No:2.0a
Types of SQL

• Static SQL: The application programmer knows in advance the SQL statement
completely.

2. Dynamic SQL: The application programmer is unaware of the SQL statement in


advance. This requires dynamic compilation and binding.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


22
Technologies Ltd Version No:2.0a
Host Variables(1 of 2)
• Host variables are just like any other variable of the high level language

• They are referred as host variables because they are used for receiving data
from the table or inserting data to the table.

• One must declare host variables for all values that are to be passed between
the application program and DB2.

• The host variables may appear anywhere in the WORKING-STORAGE


SECTION.

• The data types of the DB2 columns and corresponding host variables must be
compatible.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


23
Technologies Ltd Version No:2.0a
Host variables (2 of 2)

• The host variables can not be group items, the only exception to this rule is the
variable corresponding to VARCHAR.

• The host variables may be grouped together in a host structure.

• The host variables can be Redefined

• The host variable cannot be Renamed.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


24
Technologies Ltd Version No:2.0a
Declaring Host Variables

• Need to declare in the working-storage section of your program

EXEC SQL BEGIN DECLARE SECTION


END-EXEC.
01 EMPLOYEE-REC.
03 EMP-NO PIC S9(4) COMP.
03 EMP-NAME PIC X(15).
03 EMP-ADDRESS.
49 EMP-ADDRESS-LEN PIC S9(4) COMP.
49 EMP-ADDRESS-TEXT PIC X(25).

EXEC SQL END DECLARE SECTION


END-EXEC.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


25
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
26
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
27
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
28
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
29
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
30
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
31
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
32
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
33
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
34
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
35
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
36
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
37
Technologies Ltd Version No:2.0a
Using DCLGEN copybook

EXEC SQL
INCLUDE STUD627
END-EXEC

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


38
Technologies Ltd Version No:2.0a
SQLCA

• This is the communication area (a copybook containing some variables)


through which DB2 passes the feedback of SQL execution to the program

• In the working-storage section use

WORKING-STORAGE SECTION.
EXEC SQL
INCLUDE SQLCA
END-EXEC.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


39
Technologies Ltd Version No:2.0a
SQLCA Copy Book (1 Of 3)
01 SQLCA.
03 SQLCAID PIC X(8).
03 SQLCABC PIC S9(9) COMP.
03 SQLCODE PIC S9(9) COMP VALUE 0.
03 SQLERRM.
49 SQLERRML PIC S9(4) COMP.
49 SQLERRMC PIC X(70).
03 SQLERRP PIC X(8).
03 SQLERRD OCCURS 6 PIC S9(9) COMP.
03 SQLWARN.
05 SQLWARN0 PIC X.
05 SQLWARN1 PIC X.
05 SQLWARN2 PIC X.
05 SQLWARN3 PIC X.
05 SQLWARN4 PIC X.
05 SQLWARN5 PIC X.
05 SQLWARN6 PIC X.
05 SQLWARN7 PIC X.
03 SQLSTATE PIC X(5)

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


40
Technologies Ltd Version No:2.0a
SQLCA Copy Book (2 of 3)
03 SQLCAID For Reading dumps.
03 SQLCABC Length of SQLCA (136 bytes).
03 SQLCODE = 0 (Successful)
= +ve (Exceptional condition)
= -ve (Failure)
03 SQLERRM.
49 SQLERRML Error Message Length.
49 SQLERRMC Error Message Text.
03 SQLERRP Info about internal Error.
03 SQLERRD(1) Internal Error Code.
03 SQLERRD(2) Internal Error Code.
03 SQLERRD(3) Number of Rows affected by
INSERT, UPDATE and DELETE.
03 SQLERRD(4) Estimate of resources needed
by dynamic SQL statement.
03 SQLERRD(5) Info about dynamic SQL.
03 SQLERRD(6) Internal Error Code.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


41
Technologies Ltd Version No:2.0a
SQLCA Copy Book (3 of 3)

05 SQLWARN0 ‘W’ if any other SQLWARNx fields are


set to ‘W’.
05 SQLWARN1 ‘W’ indicates truncation of character
strings.
05 SQLWARN2 ‘W’ indicates null values were ignored.
Ex: AVG, COUNT.
05 SQLWARN3 ‘W’ indicates more columns than host
variables.
05 SQLWARN4 ‘W’ indicates no WHERE clause for
UPDATE or DELETE.
05 SQLWARN5 ‘W’ indicates SQL/DS statement.
05 SQLWARN6 ‘W’ for adjustment of DATE.
05 SQLWARN7 Reserved for Future use.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


42
Technologies Ltd Version No:2.0a
Programming guidelines (1 of 2)

• Every SQL statement must be coded between columns 12 and 72.


• Every SQL statement must be delimited between EXEC SQL and END-EXEC.
• All the tables that are used in a program are to be declared in the WORKING-
STORAGE SECTION. This can be done using INCLUDE statement

• All SQL statements other than INCLUDE and DECLARE TABLE must
appear in PROCEDURE DIVISION.

• Anything on a line within an SQL statement following two hyphens is


treated as a comment. Even * can be coded in column 7 for comments.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


43
Technologies Ltd Version No:2.0a
Single Row Manipulation (1 of 6)

SELECT

EXEC SQL
SELECT EMPNO, SALARY INTO
:WS-EMPNO, :WS-SALARY FROM EMMPLOYEE
WHERE NAME = :WS-NAME
END-EXEC

Error Handling

IF SQLCODE = 0 CONTINUE
ELSE IF SQLCODE = -811 DISPLAY “MULTIPLE ROWS”
ELSE PERFORM C9000-ERROR-PARA.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


44
Technologies Ltd Version No:2.0a
Single Row Manipulation (2 of 6)
INSERT

EXEC SQL
INSERT INTO EMPLOYEE (EMPNO, NAME, SALARY)
VALUES (:WS-EMPNO, :WS-NAME, :WS-SALARY)
END-EXEC

Error Handling

IF SQLCODE = 0 CONTINUE
ELSE DISPLAY “UNIDENTIFIED ERROR OCCURRED”.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


45
Technologies Ltd Version No:2.0a
Single Row Manipulation (3 of 6)
UPDATE

EXEC SQL
UPDATE EMPLOYEE SET SALARY = :WS-SALARY
WHERE EMPNO = 10878
END-EXEC

Error Handling

IF SQLCODE = 0 CONTINUE
ELSE DISPLAY “UNIDENTIFIED ERROR OCCURRED”.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


46
Technologies Ltd Version No:2.0a
Single Row Manipulation (4 of 6)

DELETE

EXEC SQL
DELETE FROM EMPLOYEE WHERE EMPNO = :WS-EMPNO
END-EXEC

Error Handling

IF SQLCODE = 0 CONTINUE
ELSE DISPLAY “UNIDENTIFIED ERROR OCCURRED”.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


47
Technologies Ltd Version No:2.0a
Single Row Manipulation (5 of 6)
Selecting Nullable columns(Columns which can take NULL values)
EXEC SQL
SELECT NAME, SALARY
INTO :WS-NAME, :WS-SALARY:WS-SALARY-IND
FROM EMPLOYEE
WHERE EMPNO = :WS-EMPNO
END-EXEC

Indicator variable values and their meanings

(1) 0 Not Null


(2) -1 Null
(3) -2 Exceptional condition

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


48
Technologies Ltd Version No:2.0a
Single Row Manipulation (6 of 6)
Inserting Null values to columns

MOVE -1 TO WS-SALARY-IND
EXEC SQL
INSERT INTO EMPLOYEE(SALARY)
VALUES:WS-SALARY:WS-SALARY-IND
END-EXEC

Error Handling

IF SQLCODE = 0 CONTINUE
ELSE DISPLAY “UNIDENTIFIED ERROR OCCURRED”.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


49
Technologies Ltd Version No:2.0a
Cursors (1 of 7)

• Are memory structures used to handle multiple row selections at a time.

• Conceptually they is a results table used by DB2 to contain the multiple results
of a query.

• They are data structures which hold some/all the results of a query.

• Are defined in the WORKING- STORAGE SECTION/ PROCEDURE


DIVISION.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


50
Technologies Ltd Version No:2.0a
Cursors (2 of 7)
Operations associated with a Cursor

2. DECLARE

4. OPEN

6. FETCH

8. CLOSE

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


51
Technologies Ltd Version No:2.0a
Cursors (3 of 7)
Declaring a Cursor

Note: This is just the definition, DB2 executes this statement


when we open it.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


52
Technologies Ltd Version No:2.0a
Cursors (4 of 7)

Opening a Cursor

EXEC SQL
OPEN EMPCUR
END-EXEC

Closing a Cursor

EXEC SQL
CLOSE EMPCUR
END-EXEC

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


53
Technologies Ltd Version No:2.0a
Cursors (5 of 7)

Fetching results from a cursor

EXEC SQL
FETCH EMPCUR
INTO :WS-EMPNO,:WS-NAME,:WS-SALARY
END-EXEC

• Remarks:

We get one row at a time.


Only forward READ till SQLCODE = 100.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


54
Technologies Ltd Version No:2.0a
Cursors (6 of 7)

Fetching to Update

EXEC SQL
DECLARE EMPCUR CURSOR
SELECT EMPNO, NAME, SALARY
FROM EMPLOYEE WHERE EMPNO > :WS-EMPNO
FOR UPDATE OF SALARY
END-EXEC

Note: This gives a U lock on the records.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


55
Technologies Ltd Version No:2.0a
Cursors (7 of 7)

Updating a row fetched from a cursor

EXEC SQL
UPDATE EMPLOYEE
SET SALARY = :WS-SALARY
WHERE CURRENT OF EMPCUR
END-EXEC

Note: This updates exactly one row even if we do not


give the key value.

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


56
Technologies Ltd Version No:2.0a
Summary

• SPUFI Hands On

• Introduction to Embedded SQL

• DCLGEN Hands On

• SQLCA Copy Book and its Use

• Single Row Manipulation

• Multiple Row Manipulation

• Cursors

Copyright © 2005, Infosys ER/CORP/CRS/DB01/003


57
Technologies Ltd Version No:2.0a
Copyright © 2005, Infosys ER/CORP/CRS/DB01/003
58
Technologies Ltd Version No:2.0a

You might also like