1.概念:
對資料庫的處理過程是以事物為機關進行的。
組織與管理是以表為機關進行的。
表是放在表空間(table space)中的,
表空間是放在資料庫(database)中的。
Scheme:是指實體名稱中的高位辨別字段,該字段用于标志整個名稱。
當建立一個使用者時,會産生一個同名的scheme。
如:SET CURRENT SCHEME = 'PAYROLL'
SELECT * FROM EMPLOYEE. ---等同于下一條語句。
SELECT * FROM PAYROLL.EMPLOYEE.
視圖:VIEW,一張虛拟表,通常将多表連結的結果
作為視圖,以友善資料查詢。
索引:INDEX,直接建立在表上的,相當于一個目錄,
也是友善資料查詢。
2.應用:
SQLCA:SQL通信區域,實作COBOL和DB2的互動。
執行SQL後,會産生一個稱作SQLCODE的傳回碼,數字組成,
存放于SQLCA中,為0或者100時,成功,為負數時錯誤。
在SQLCA中,還有SQLSTATE,由字元組成。
DB2 catalog:資料字典,一張系統表,用來存放資料庫所用的有關資訊。
對于使用者而言,為隻讀的。
DB2 directory:功能相似于catalog,性能高,是以VSAM檔案組織存放資料的。
二者同步時,以DB2 directory為準。
COBOL中調用SQL語句的格式:
嵌入式SQL
主變量:即可為COBOL所用,也可為SQL語句所用(前面加‘:’)。
如:DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC. --通信區(必寫)
EXEC SQL INCLUDE COURSERCD EXEC-EXEC. --指定資料記錄
01 COURSE-DETAIL.
03 RCODE PIC X(4). --主變量,
03 RNAME PIC X(20).
03 RINST PIC X(10).
03 RDAYS PIC 9.
PROCEDURE DIVISION.
MOVE '00AB' TO RCODE.
MOVE 'GANG' TO RNAME.
MOVE 'SICC' TO RINST.
EXEC SQL
INSERT INTO Q.COURSE ( CODE, NAME)
VALUES ( :RCODE, :RNAME)
UPDATE Q.COURSE
SET INST = :RINST
WHERE CODE = :RCODE.
SELECT DAYS
INTO :RDAYS FROM Q.COURSE
WHERE CODE = :RCODE.
END-EXEC.
...
訓示變量:在主變量之後,用于訓示主變量所接收到資料是否為空。
當為空時,訓示變量為負數。
用途:測試資料是否為空值,将空值傳遞給DB2中的資料。
如:EXEC SQL
SELECT NO, NAME
INTO :NO, :NAME:IND1 --測試空值
FROM TESTB
WHERE NO = :NO
END-EXEC.
IF IND1 < 0 MOVE 'UNKNOW' TO TESTATTR1.
...
MOVE -1 TO IND1.
MOVE '00A1' TO NO.
EXEC SQL
SET NAME = :NAME:IND1 --存儲空值
WHERE NO = :NO
ENDE-EXEC.
動态SQL:将SQL首先讀入變量,通過嵌入式SQL執行變量中的SQL。
包含SELECT和非SELECT(含有參數和不含有參數)
不含有參數的SELECT:
如:01 STMT.
49 STMT-LEN PIC S9(4) COMP VALUE +255.
49 STMT-TEXT PIC X(255).
MOVE 'DELETE FROM TESTTB'.
EXEC SQL
EXECUTE IMMEDIATE :STMT --執行
END-EXEC
含有參數的SELECT:
如:01 STMT.
49 STMT-LEN PIC S9(4) COMP VALUE +255.
49 STMT-TEXT PIC X(255).
01 PARMA PIC X(5).
01 PARMB PIC X(20).
MOVE 'DELETE FROM TESTTB
WHERE TESTNO = ? AND TESTNAME = ?' TO STMT.
EXEC SQL
PREPARE PRST FROM :STMT. ---預執行
END-EXEC.
MOVE 'A0023' TO PARMA.
MOVE 'GEORGE' TO PARMB.
EXEC SQL
EXECUTE PRST USING :PARMA, :PARMB --執行
END-EXEC.
遊标:對多行資料進行處理時,以行為機關的資料記錄的定位功能。
分為基本遊标和復原遊标(靜态和動态)。
基本遊标
定義:
如:MOVE 'ADFADADF' TO HATTR1.
EXEC SQL
DECLARE P1 CURSOR FOR --定義遊标
SELECT TESTNO, TESTNAME --選擇指定列(屬性)
FROM TESTTB --指定表
WHERE TESTATTR1 = :HATTR1 -指定比對屬性
ORDER BY TESTNO -指定屬性排序,如不指定預設資料記錄的位置進行搜尋
OPTIMIZE FOR 20 ROWS -每屏中顯示的行數
FETCH FIRST 200 ROWS ONLY -共顯示的行數
END-EXEC
用法:打開--使用--關閉。
如:01 HOST.
05 HNO PIC X(5).
05 HNAME PIC X(20).
...
EXEC SQL DECLARE TST CURSOR FOR
SELECT TESTNO, TESTNAME
FROM TESTTB
WHERE TESTATTR1 = :HATTR1
ORDER BY TESTNO
END-EXEC
...
EXEC SQL OPEN TST END-EXEC.
...
EXEC SQL
FETCH TST INTO :HNO, :HNAME --主要用FETCH來操作變量傳遞
END-EXEC.
EXEC SQL
DELETE FROM TESTTB WHERE CURRENT OF TST
END-EXEC.
...
EXEC SQL CLOSE TST END-EXEC.
STOP RUN.
當進行UPDATE操作時,要在遊标中指定更新哪一個屬性。
如:EXEC SQL DECLARE TST CURSOR FOR
SELECT...
...
FOR UPDATE OF TESTNAME --指定屬性
...
END-EXEC
...
EXEC SQL UPDATE TESTTB
SET TESTNAME = :HNAME
WHERE CURRENT OF TST
END-EXEC.
利用遊标處理多行記錄:
利用遊标處理多行記錄時,相應的主變量也應定義為數組的形式。
通過OCCURS語句定義為COBOL中的表。
如:01 HOST-VARY.
05 HOST-ID PIC 9(5) COMP OCCURS 10 TIMES.
05 HOST-NAME OCCURS 10 TIMES.
49 NAME-LEN PIC 9(2) COMP.
49 NAME-TEXT PIC X(20).
EXEC SQL
DECLARE MTR SCROLL CURSOR
WITH ROWSET POSITIONING
FOR SELECT ID, NAME
FROM TESTTABLE
END-EXEC
EXEC SQL OPEN MTR END-EXEC.
...
EXEC SQL
FETCH CURRENT ROWSET FROM C1 FOR 10 ROWS INTO ...
END-EXEC.
EXEC SQL
FETCH NEXT ROWSET FROM C1 FOR 10 ROWS INTO...
END-EXEC.
EXEC SQL
FETCH ROWSET STARTING AT RELATIVE -7
FROM C1 FOR 10 ROWS INTO ...
END-EXEC
EXEC SQL
FETCH FIRST ROWSET
FROM MTR FOR 10 ROWS
INTO :HOST-ID:INDICATE1, :HOST-NAME:INDICATE2
END-EXEC.
...
EXEC SQL CLOSE MTR END-EXEC.
STOP RUN.
4.其他
DB2中的鎖:保證資料操作的一緻性。
因素:類型,範圍,時間
死鎖:并發程序互相等待資源無限等待的情況。
通路路徑:Access Path,決定查找通路資料的方式,對效率有直接影響。
EXPLAIN:優化工具,主要根據PLAN_TABLE實作性能優化的。
而PLAN_TABLE中儲存的資訊為通路路徑相關的資訊。