DB2
一、DB2 概述
1. SPUFI (SQL Processor Using file input)
主要需要了解实验上的一些操作
参考:https://www-01.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.apsg/src/tpc/db2z_executesqlspufi.dita
2. DB2 data Structure & data Object
Data Structure Overview
Buffer Pool
DB2 has four kinds of page size for data buffers:
Types of Table Spaces
-
Simple table spaces
-
Segmented table spaces
-
Partitioned table spaces
-
Universal table spaces
-
Large object table spaces (LOB)
-
XML table spaces
Data Type
datatype <——> cobol:
Integer
bytes (5 if nullable) PIC S9(9) COMP
Smallint
bytes (3 if nullable) PIC S9(4) COMP
Char( n )
max. 254 bytes PICX( n )
Varchar( n )
max. 4046 bytes A structure containing structure containing PIC S9(4) COMP for length and PIC X( n ) for the data
Time
3 bytes (4 if nullable) PICX(8) PIC X(8)
Date
4bytes (5if nullable) 4 bytes (5 if nullable) PIC X(10)
null attribute
default value.
DB2 Object map
3. DB2 Utilities
二、Program Structure
****************************************************************** * Author: * Date: * Purpose: * Tectonics: cobc ****************************************************************** IDENTIFICATION DIVISION. *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- PROGRAM-ID. YOUR-PROGRAM-NAME. ENVIRONMENT DIVISION. *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC EXEC SQL INCLUDE COPYBOOK-DEPTDL END-EXEC *----------------------- PROCEDURE DIVISION. *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- MAIN-PROCEDURE. MOVE 'A00' TO DEPTNO. EXEC SQL SELECT DEPTNO,DEPTNAME,MGRNO INTO :DEPTNO,:DEPTNAME,:MGRNO FROM ST565.DEPT WHERE DEPTNO=:DEPTNO END-EXEC. IF SQLCODE=0 DISPLAY 'DEPTNO IS:' DISPLAY DEPTNO DISPLAY 'DEPTNAME IS:' DISPLAY DEPTNAME DISPLAY 'MGRNO IS:' DISPLAY MGRNO ELSE IF SQLCODE = 100 DISPLAY 'NOT FOUND!' ELSE DISPLAY 'SQL ERROR' END-IF. STOP RUN.
三、DB2 embedded SQL working principle
DBRM( Database Request Modules)
packages:
plans:
需要注意的过程: precompile, compile, link, bind
四、Cursor
cursor operations: declare, open, fetch, close
declare:
EXEC SQL DECLARE cursor-name [NO SCROLL/SCROLL] [DYNAMIC/STATIC] CURSOR [WITH/ WITHOUT HOLD] FOR select-statement [FOR UPDATE OF columns-lists/ FOR FETCH ONLY] END-EXEC.
open:
EXEC SQL OPEN Cursor-name USING host-variables END-EXEC.
fetch:
EXEC SQL FETCH Cursor-name INTO :Host-variable-col1, :Host-variable-col2, . . :Host-variable-coln END-EXEC.
null indictor
If NULL indicator value = -1 (NULL existed in the retrieved column) = 0 (Retrieved column has the proper value) = 2 (Truncated value retrieved)
close:
EXEC SQL CLOSE cursor-name END-EXEC.
static cursor VS dynamic cursor
sensitive cursor VS insensitive cursor
加深理解:
1. 基本表和视图之间的关系
基本表
是独立存在的表,不是由其它的表导出的表
视图
是一个虚拟的表,是从一个或几个基本表导出的表;
它本身不独立存在数据库中,数据库中只存放视图的定义而不存放对应的数据;
当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。
2. Table space有哪些类型,它们的联系和区别,SEGSIZE的含义是什么
Simple table spaces
Segmented table spaces
Partitioned table spaces
Universal table spaces
LOB (Large object table spaces)
Xml table spaces
SEGSIZE: Segmented Table spaces are divided into segments:
- l Each segment is dedicated to a table
- l Segment can consist of 4/8/16/32/64 pages
- l Segsize specified by creator
3. 静态SQL和动态SQL的特点
Static SQL 经过程序的编译后,在程序运行之前已经确定下来。
1 EXEC SQL 2 3 SELECT NAME, DEPT INTO :NAME, :DEPT 4 5 FROM STAFF WHERE EMPNO = :EMPID
Dynamic SQL在程序运行的过程中构造并执行。
EG:
1 strcpy(query, “select tabname From syscat.table”); 2 3 strcpy(query,”where tabname <>?); 4 5 EXEC SQL PREPARE stmt From :query
Static sql:
静态SQL语句中要访问的表名和列名是必须存在的;
开销较小;
数据访问计划是在预编译时候生成的.
Dynamic SQL:
动态SQL语句结构在预编译的时候是未知的,SQL的结构不固定,表和列可能随时变化
SQL语句存储在某个变量中并在程序运行中被引用,更为灵活
数据访问计划在运行中生成
4. DB2常用的Utilities及它们各自的功能
见上文
5. 什么是package、Plan, 它们的区别和联系
Bind Package(collection_id) Member(DBRM NAME| Package_id )
Bind Plan(plan_Name) Pklist(Package_Name1, Package_Name2..)
6. 敏感和不敏感游标的区别,静态游标和动态游标的区别
不敏感的游标意味着在游标打开后,不能看到其他应用对基础表的更改,不敏感的游标是只读的,结果表中行的数量和内容在游标打开的整个过程中不变,不敏感的游标不能用于数据更新和删除。
敏感的游标意味着在游标打开后,能看到其他应用对基础表的所作的更改,结果表中行的数量(其他应用插入或删除)在游标打开的整个过程中不变,但是行的内容可变。敏感的游标能由于数据更新和删除。
静态游标打开后,结果集的大小不变,结果集中行的数据顺序也不变。
动态游标打开后,结果集的大小可变,结果集中行的数据顺序也可变,即其他游标可以对结果集进行插入,更新或删除操作。
7. 理解Multiple Rows Processing程序
程序示例:
1 IDENTIFICATION DIVISION. 2 PROGRAM-ID. EXAMPLE. 3 ENVIRONMENT DIVISION. 4 DATA DIVISION. 5 WORKING-STORAGE SECTION. 6 01 WS-DEPT. 7 10 WS-DEPTNO PIC X(3) OCCURS 2 TIMES. 8 10 WS-MGRNO PIC X(6) OCCURS 2 TIMES. 9 EXEC SQL INCLUDE SQLCA END-EXEC. 10 PROCEDURE DIVISION. 11 PROC-START. 12 EXEC SQL 13 DECLARE C1 SCROOL CURSOR 14 WITH ROSET POSITIONING FOR 15 SELECT DEPTNO,MGRNO FROM DEPT 16 END-EXEC. 17 18 EXEC SQL OPEN C1 END-EXEC. 19 20 EXEC SQL 21 FETCH FIRST ROWSET FROM C1 FOR 2 ROWS 22 INTO :WS-DEPTNO, :WS-MGRNO 23 END-EXEC. 24 IF SQLCODE = 0 25 DISPLAY 'EXECUTED SUCCESSFULLY!' 26 DISPLAY 'DEPTNO1 IS:' 27 DISPLAY WS-DEPTNO(1) 28 DISPLAY 'LOCATION1 IS:' 29 DISPLAY WS-MGRNO(1) 30 DISPLAY 'DEPTNO2 IS:' 31 DISPLAY WS-DEPTNO(2) 32 DISPLAY 'LOCATION2IS:' 33 DISPLAY WS-MGRNO(2) 34 ELSE IF SQLCODE= 100 35 DISPLAY 'SQL ERROR!' 36 END-IF. 37 38 EXEC SQL CLOSE C1 END-EXEC. 39 STOP RUN.
8. DB2常用SQL语句
数据定义语言(DDL), 数据操作语言(DML), 数据控制语言(DCL)
1 CREATE STOGROUP STOUDB6 2 3 VOLUMES (DAVP7C, DAVP8C, DAVP9E) 4 5 PASSWORD UESTC;
1 ALTER STOGROUP STOUDB6 2 3 ADD VOLUMES (DAVP9F, DAVP8C, DAVP9E) 4 5 REMOVE VOLUMES (DAVP7C, DAVP8C) 6 7 PASSWORD UESTC;
1 CREATE TABLESPADCE DSN8S91D IN DSN8D91A 2 3 USING STOGROUP DSN8G910 4 5 PRIQTY 52 SECQTY 20 6 7 LOCKSIZE PAGE 8 9 BUFFERPOOL BP1;
1 CREATE UNIQUE INDEX DSN8910.XDEPT ON 2 3 DSN8910.DEPT (DEPTNO ASC) 4 5 PADDED USING STOGROUP DSN8G910 6 7 PRIQTY 512 SECQTY 64 8 9 BUFFERPOOL BP1;
1 2 ALTER TABLESPACE DSN8D91A.DSN8S91D 3 4 BUFFERPOOL BP2 LOCKSIZE PAGE;
1 ALTER INDEX DSN8910.XPROJ1 2 3 BUFFERPOOL BP1 COPY YES PIECESIZE;
1 CREATE TABLE BRANCH( 2 3 BRAN_ID CHAR (10) NOT NULL, 4 5 BRAN_NAME VARCHAR (20) NOT NULL, 6 7 BRAN_STATUS CHAR(2) NOT NULL 8 9 ) IN BANKDB.BANKTS;
1 ALTER TABLE BRANCH ADD CONSTRAINT PK_BRAND1 2 3 PRIMARY KEY(BRAN_ID);
1 ALTER TABLE BRANCH 2 3 ADD CONSTRAINT CK_BRANST1 4 5 CHECK (BRAN_STATUS=’AC’ AND BRAN_STATUS=’EP’);
参考:
以上内容来自SCUT IBM 课程和IBM官方学习网站,请勿随意转发。