Вы находитесь на странице: 1из 45

DB2 Application programming

Combines the power of SQL & programming


language
Connect to database
Perform transaction
Disconnect from database
End the program

File processing vs DB2 processing


DB2 Programming Considerations

Flat File Programming Considerations

No FD required.DB2 tables must be


declared

FD required

No DD card needed

DD card needed

DB2 tables need not be opened;


instead, cursors are opened for
each SQL statement

Flat files must be opened before being processed

DB2 tables need not be closed;


instead, cursors are closed for
each SQL statement

Flat files must be closed

Set level processing

Row level processing

No more data indicated by +100 SQL


return code

End of file is reported to the program

SQL in application
Embedded SQL
Static
Dynamic

Types of SQL
SQL Type
DCL

SQL Statements
GRANT & REVOKE

DDL

ALTER, CREATE, DROP

DML

DELETE, INSERT, SELECT, UPDATE

DYNAMIC SQL

DESCRIBE, EXECUTE, PREPARE

DISTRIBUTED

CONNECT, RELEASE

STO PROC

CALL, ALLOCATE, ASSOCIATE

DEFINITION CONTROL

INCLUDE

EMBEDDING CONTROL

CLOSE, DECLARE, FETCH, OPEN

TRANSACTION CONTROL

COMMIT, ROLLBACK, SAVEPOINT

ASSIGNMENT

SET, VALUES INTO

ERROR HANDLING

WHENEVER

Why to follow rules?


Parsing
Handle the mismatch in processing
Communication b/w program and DBMS
Changing predicates

SQL in COBOL Program

Enclose embedded SQL with EXEC-SQL


EXEC SQL
SQL STATEMENT
END-EXEC.

Declare all the tables


Include SQLCA

SQL Communication Area


Communicates information
SQLABC
SQLCODE
SQLERRD(3)
SQLSTATE

Get Diagnostics
Provides additional information

EXAMPLE:
GET DIAGNOSTICS :RC = ROW_COUNT
Row number
Server name
Authorization id
Authentication type

Host variable
Area of storage allocated
Must be prefixed with colon

EXEC SQL
SELECT EMPNO,
SALARY
INTO
:HOSTVAR-EMPNO,
:HOSTVAR-SALARY
FROM EMP
WHERE EMPNO = :HOSTVAR-EMP
END-EXEC.

Host variable usage


EXEC SQL
UPDATE EMP
SET SALARY = : HOSTVAR-SALARY
WHERE EMPNO = : HOSTVAR-EMPNO
END-EXEC.
EXEC SQL
DELETE FROM EMP
WHERE WORKDEPT = : HOSTVAR-WORKDEPT
END-EXEC.
EXEC SQL
INSERT INTO DEPT
VALUES
(:HOSTVAR-DEPTNO,
:HOSTVAR-DEPTNAME,
:HOSTVAR-MGRNO,
:HOSTVAR-ADMRDEPT)
END-EXEC.

Host variable usage


01

DCLDEPT.
10 DEPTNO
10 DEPTNAME.
49 DEPTNAME-LEN
49 DEPTNAME-TEXT
10 MGRNO
10 ADMRDEPT
10 LOCATION

EXEC SQL
SELECT
FROM
INTO
WHERE
END-EXEC.

PIC X(3) .
PIC
PIC
PIC
PIC
PIC

S9(4) USAGE COMP.


X(36) .
X(6) .
X(3) .
X(16) .

DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION


DEPT
:DCLDEPT
DEPTNO = ' A00

Null indicator
What is null?
Handle null value of a db2 column
Code immediately after the column name variable
01

EMP-INDICATORS.
10 SALARY-IND PIC S9(4) USAGE COMP.

EXEC SQL
SELECT
INTO
FROM
WHERE
END-EXEC.

EMPNO, SALARY
:EMPNO,
:SALARY: SALARY-IND
EMP
EMPNO = '000100

Null indicator
Possible values
0, -2, -1
Contains original length of column in case of truncation
Null indicator structure
01

IDEPT PIC S9(4) USAGE COMP OCCURS 5 TIMES.

EXEC SQL
SELECT DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION
FROM DEPT
INTO :DCLDEPT: DEPT-IND
WHERE DEPTNO = ' A00
END-EXEC.

Sqlcode -305

Column types & COBOL variables


DB2 DATA TYPE

COBOL DATA TYPE

REAL or FLOAT(n)

COMP-1

DOUBLE PRECISION,
or FLOAT(n)

COMP-2

DECIMAL(i+d,d) or NUMERIC(i+d,d)

S9(i)V9(d) COMP-3 or S9(i)V9(d)

SMALLINT

S9(4) COMP

INTEGER

S9(9) COMP

CHAR(n)

X(N)

VARCHAR(n)

01 VAR-TYPE
49 VAR-NAME
49 VAR-LEN

PIC X(N)
PIC 9(4) COMP

Cursors
Process a set of rows
Statements
Declare
Open
Fetch
Close

Cursors
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT
DEPTNO, DEPTNAME, MGRNO
FROM
DEPT
WHERE
ADMRDEPT = : ADMRDEPT
END-EXEC.
EXEC SQL
OPEN C1
END-EXEC.
EXEC SQL
FETCH C1
INTO : DEPTNO,
: DEPTNAME,
: MGRNO
END-EXEC.
EXEC SQL
CLOSE C1
END-EXEC.

Cursors
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT DEPTNO, DEPTNAME, MGRNO
FROM
DEPT
WHERE
ADMRDEPT = :ADMRDEPT
FOR UPDATE OF MGRNO
END-EXEC.
EXEC SQL
OPEN C1
END-EXEC.
EXEC SQL
FETCH C1
INTO : DEPTNO,
: DEPTNAME,
: MGRNO
END-EXEC.

Cursors
EXEC SQL
UPDATE DEPT
SET MGRNO = ' 000060
WHERE CURRENT OF C1
END-EXEC.
EXEC SQL
CLOSE C1
END-EXEC.

SQL Codes
-501 Cursor not open on fetch
-502 Opening a cursor which is already open

Types of cursors
Scrollable cursors
Scroll forward/Backward
Types
Sensitive Updatable, Changed data access
Insensitive Not updatable, No changed data
access

Types of cursors
Keywords
Next
Prior
First
Last
Current
Absolute (n)
Relative (n)

Types of cursors
DECLARE CSR1 SENSITIVE STATIC SCROLL CURSOR
FOR SELECT
FIRSTNAME, LASTNME
FROM
DSN8710. EMP
ORDER BY LASTNME;
OPEN CSR1;
FETCH LAST CSR1 INTO : FN, : LN;

Static - Updates/deletes viewable


Dynamic Updates/deletes/Inserts viewable
Must use GTT for static

Rowset Positioning
Retrieves > 1 row in one fetch
Must use array structure
EXEC SQL
DECLARE CURSOR SAMPCURS
WITH ROWSET POSITIONING
FOR SELECT DEPTNO
FROM
DSN8810.DEPT
END-EXEC.
FETCH ROWSET FROM SAMPCURS
FOR 5 ROWS
INTO :HOSTVAR-ARRAY;

Rowset Positioning
UPDATE
SET
FOR
FOR

EMP
SALARY = 50000.00
CURSOR CSR1
ROW : HV OF ROWSET;

DELETE DEPT
FOR CURSOR CSR2
FOR ROW 3 OF ROWSET;
INSERT INTO SAMPLE_TABLE
FOR : N ROWS
VALUES(: HOSTVAR-ARRAY1, : HOSTVAR-ARRAY2, . . . )
ATOMIC;

Rowset Positioning
NEXT ROWSET
PRIOR ROWSET
FIRST ROWSET
LAST ROWSET
CURRENT ROWSET
ROWSET STARTING AT ABSOLUTE n
ROWSET STARTI NG AT RELATIVE n

Dynamic SQL
Advantages
Can use different indexes
Column distribution statistics
Bound only during execution
Disadvantages
More time to execute than static
Involves more overhead

Dynamic SQL
Execute immediate
Non SELECT
Fixed list SELECT
Varying list SELECT

Dynamic SQL
EXEC SQL
INCLUDE SQLCA
END-EXEC.
.
.
01 STRING-VARIABLE.
49 STRING-VAR-LEN
PIC S9(4)
USAGE COMP.
49 STRING-VAR-TXT
PIC X(100)
.
.
PROCEDURE DIVISION.
.
.
MOVE +45 TO STRING-VAR-LEN.
MOVE "DELETE FROM DSN8810.PROJ WHERE DEPTNO = ' A00'"
TO STRING-VARIABLE.
EXEC SQL
EXECUTE IMMEDIATE : STRING-VARIABLE
END-EXEC.

Dynamic SQL
Use for one-time execution
Involves preparation every time
More overhead
Does not support select

Dynamic SQL
EXEC SQL
INCLUDE SQLCA
END-EXEC.
.
01 STRING-VARIABLE.
49 STRING-VAR-LEN
PIC S9(4)
USAGE COMP.
49 STRING-VAR-TXT
PIC X(100)
.
PROCEDURE DIVISION.
.
MOVE +45 TO STRING-VAR-LEN.
MOVE "DELETE FROM DSN8810.PROJ WHERE DEPTNO = ' A00'"
TO STRING-VARIABLE.
EXEC SQL
PREPARE STMT1 FROM :STRING-VARIABLE;
END-EXEC.
EXEC SQL
EXECUTE STMT1;
END-EXEC.

Dynamic SQL
EXEC SQL INCLUDE SQLCA END-EXEC.
.
01 STRING-VARIABLE.
49 STRING-VAR-LEN
PIC S9(4)
USAGE COMP.
49 STRING-VAR-TXT
PIC X(100).
.
PROCEDURE DIVISION.
.
MOVE +40 TO STRING-VAR-LEN.
MOVE "DELETE FROM DSN8810.PROJ WHERE DEPTNO = ?
TO STRING-VARIABLE.
EXEC SQL
PREPARE STMT1 FROM :STRING-VARIABLE;
END-EXEC.
MOVE ' A00' TO TVAL.
EXEC SQL
EXECUTE STMT1 USING : TVAL;
END-EXEC.

Dynamic SQL
SELECT
WHERE

PROJNO, PROJNAME, RESPEMP FROM


PROJNO
= ? AND PRSTDATE = ?

DSN8810. PROJ

EXEC SQL
DECLARE CSR2 CURSOR
FOR FLSQL
END-EXEC.
EXEC SQL
PREPARE FLSQL FROM : STRING-VARIABLE
END-EXEC.
EXEC SQL
OPEN CSR2 USING :TVAL1, :TVAL2
END-EXEC.
EXEC SQL FETCH CSR2 INTO : PROJNO, :PROJNAME, : RESPEMP END-EXEC.
EXEC SQL CLOSE CSR2 END-EXEC.

Program Preparation

Program preparation
Create DCLGEN
Declare table statement
Copybook
COLSUFFIX(YES) and NAMES()

Program preparation
Precompilation
Expands the Include members
Searches SQL statements
Replaces the SQL statement with system call
Extracts all the SQL statements and produce DBRM
Places timestamp in modified source & DBRM

Program preparation
Bind
Compiler for SQL
Checks the syntax
Checks the column and table information
Authorization validation
Produces the optimized access path with Optimizer
Bind package & Bind plan available

Program preparation
SYSIBM.SYSDBRM
SYSIBM.SYSSTMT
SYSIBM.SYSPACKSTMT
SYSTABSTATS
SYSCOLSTATS
SYSINDEXSTATS
SYSUSERAUTH
SYSCOLDISTSTATS

Isolation Level
Repeatable Read
Read Stability
Cursor stability
Uncommitted read

Isolation Level

LOSTUPDATES

DIRTYREAD

NONREPEATABLEREAD

PHANTOM

RR

RS

CS

UR

Execute DB2 program


//JOBLIB
DD DSN=SYS1. DB2V810. DSNEXIT, DISP=SHR
//
DD DSN=SYS1. DB2V810. DSNLOAD, DISP=SHR
//BATCHPRG
EXEC PGM=IKJEFT1B
//SYSTSPRT
DD SYSOUT=*
//SYSPRINT
DD SYSOUT=*
//SYSUDUMP
DD SYSOUT=*
//SYSTSIN
DD *
DSN SYSTEM(DSN)
RUN PROGRAM(Place program name here) +
PLAN(Place plan name here)
END
/*

Program efficiency
CPU time
Elapsed time
Number of I/O
Lock wait time
User satisfaction

Program efficiency
Avoid using separate programs for DB2 access
Code modular programs
Use stored procedures
Unqualified SQL
Avoid Select *
Avoid selecting columns whose values are known

Program efficiency
Use indexed columns in where clause
Use join than application logic
Avoid host structures
Use For Read-only/For fetch only
Explicitly code literals
Use isolation levels at SQL level

Program efficiency
Do not use OCCURS for host variables
Avoid using host structures
Use DCLGEN
Use meaningful names
Use checkpoint restart logic
Use cursors with hold than reposition

SQL Codes
-803 Duplicate key value
-805 Timestamp mismatch
-904 Resource unavailable
-927 DB2 environment not established
-811 Embedded SQL fetch rows > 1
-911 - Deadlock

SQL Codes
-206 Column name not found
-204 Object not defined

Вам также может понравиться