主要須要瞭解實驗上的一些操做sql
參考:https://www-01.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.apsg/src/tpc/db2z_executesqlspufi.dita數據庫
Data Structure Overviewbash
Buffer Poolide
DB2 has four kinds of page size for data buffers:學習
Types of Table Spacesfetch
Data Type網站
Integerspa
bytes (5 if nullable) PIC S9(9) COMP3d
Smallintcode
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.
****************************************************************** * 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.
DBRM( Database Request Modules)
packages:
plans:
須要注意的過程: precompile, compile, link, bind
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:
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官方學習網站,請勿隨意轉發。