VI. Tóm tắt câc hăm
PHẦN II I: XĐY DỰNG GIAO DIỆN LẬP TRÌNH OCI A-Tóm tắt lý thuyết
A-Tóm tắt lý thuyết
Trín cơ sở lý thuyết đê trình băy , việc xđy dựng câc hăm mới cũng bao gồm tất cả câc hăm OCI mă thực hiện câc công việc của một chương trình OCI .
Sau lă mối tương quan giữa câc hăm OCI chuẩn vă câc hăm đê xđy dựng được cần sử dụng để xđy một chương trình OCI cơ bản :
Bướ OCI chuẩn Giao diện mới
1 1>Dùng hăm OCIInitialize() để khởi tạo câc process
2>Dùng hăm OCIEnvInit() để tạo environment handle 3>Dùng hăm OCIHandleAlloc() để chỉ định service handle 4>Dùng hăm OCIHandleAlloc() để chỉ định error handle 5>Dùng hăm OCIHandleAlloc() để chỉ định server handle 6>Dùng hăm OCIHandleAlloc() để chỉ định authentication handle
8>Dùng hăm OCIAtach() để liín
1>Dùng hăm
sword connect(const text *uid, const text *pwd, const text *hoststring) *uid (IN) : username
*pwd (IN): password *hoststring(IN) :tín server
Nếu logon thănh công hăm trả về OCI_SUCCESS
Câc giâ trị khâc , logon bị lỗi vă câc lỗi năy được thông bâo bằng câch gọi hăm massageError(errhp /* error hadle */)
GVHD :KS.Bùi Hoăi Thắng
kết với server
9>Dùng hăm OCIAttrSet() thiết lập server handle trong service handle 10>Dùng hăm OCIAttrSet() để thiết lập câc thuộc tính của authentication handle(username vă password) 11>Dùng hăm OCIAttrSet() để thiết lập authentication handle trong the Service handle
12>Dùng hăm OCISessionBegin() logon
2 13>Gọi hăm OCIHandleAlloc() để chỉ định statement handle . Sau đó 14>Gọi hăm OCIStmtPrepare() để chuẩn bị phât biểu
2>Gọi hăm
sword prepare(text *sql) *sql (IN): lệnh SQL
Nếu prepare thănh công hăm trả về OCI_SUCCESS .
Câc giâ trị khâc bị lỗi 3 Nếu Bind theo tín :
15-1>Gọi hăm OCIHandleAlloc() để chỉ định bind handle . Sau đó
16>Gọi hăm OCIBindByName()
Nếu Bind theo vị trí :
15-1>Gọi hăm OCIBindByPos()
Nếu dùng mảng cấu trúc :
15-1>Gọi hăm OCIBindByPos() hoặc OCIBindByName() . Sau đó 15-2>Gọi Hăm
OCIBindArrayOfStruct()
Nếu bind động :
15-1>Gọi hăm OCIBindByPos() hoặc OCIBindByName()
15-2>Xđy dựng hăm icbfp 15-3>Xđy dựng hăm ocbfp
15-4>Gọi hăm OCIBindDynamic()
Nếu bind theo tín :
3-1>Gọi hăm
sword bndName(text *prgvar, void *namecol, ub2 type, sword size) *prgvar (IN):biến trong chương trình *namecol (IN):tín cột
type(IN) :mê kiểu dữ liệu của cột size (IN) :kích thước kiểu dữ liệu Ví dụ :
SELECT dname FROM dept
WHERE deptno= :num AND loc= :city; Thì prgvar=":num"
Namecol=deptno
Nếu bind theo vị trí thì gọi hăm:
3-1>Sword bndPos(ub4 pos, ub2 type, sword size) pos (IN) :vị trí của biến được bind
Trong ví dụ trín pos của deptno bằng 1
Nếu dùng mảng cấu trúc :
3-1>Gọi hăm
sword bndArrOfStr(ArrayBind , int ) ArrayBind(OUT) :kiểu cấu trúc được định nghĩa trong file OverOCI.h
Int (IN): số lượng biến cần bind
Nếu bind động :
3-1>Gọi hăm
sword bndDynamic(int numbnds) numbnds (OUT): số biến cần bind
*pData[ ][ ](OUT):nơi dữ liệu trả về (được khai bâo trong file OverOCI.h) 4 Thực thi :
16>Gọi hăm OCIStmtExecute()
Thực thi :
4>Gọi hăm
sword execute(int iters)
iters : tham số điều khiển (xem phần lý thuyết)
5 Mô tả câc phần tử trong select- list :
Mô tả câc phần tử trong select-list :
6 17>Gọihăm OCIStmtExecute() trong chế độ
OCI_DESCRIBE_ONLY
18>Gọi hăm OCIAttrGet() nhận số column
19>Gọi hăm OCIParamGet() thiết lập việc nhận câc tham số cột I 20>Gọi hăm OCIAttrGet() nhận kiểu dữ liệu
21> Gọi hăm OCIAttrGet() nhận kích thước dữ liệu
22> Gọi hăm OCIAttrGet() nhận tín cột vă chiều dăi của tín cột
5-1>Gọi hăm sword describe(
ArrayDes arrDescribe[], int *numcols)
arrDescribe(OUT) :xem định nghĩa trong file OverOCI.h
*numcols :số cột trong phât biểu
Nếu dùng hăm
5-2>Sword desAndDef(void *arrData[], ArrayDes arrDescribe[], int *numcols,sb2 indp[]) *arrData(OUT) :chứa dữ liệu trả về trong câc biến đê dược define trong chính hăm năy (nếu dùng hăm năy không cần gọi hăm define )
7 Define
Nếu Define theo vị trí :
23-1>Gọi hăm OCIDefineByPos()
Nếu dùng mảng cấu trúc :
23-1>Gọi hăm OCIDefineByPos(). Sau đó
13-2>Gọi Hăm
OCIDefineArrayOfStruct()
Nếu Define động :
6-1>Gọi hăm
sword definePos(sb4 size, ub2 type, void *data, int pos) size(IN):kích thước dữ liệu type(IN) :mê kiểu
*data(OUT) :con trỏ chỉ tới vùng dữ liệu được trả về
GVHD :KS.Bùi Hoăi Thắng
23-1>Gọi hăm OCIDefineByPos() hoặc OCIDefineObject()
23-2>Xđy dựng hăm icbfp 23-3>Xđy dựng hăm ocbfp 23-4>Gọi hăm
OCIDefineDynamic()
pos (IN): vị trí của biến được define 6-2>Hoặc (nếu dùng hăm năy thì không cần dùng hăm fetchData() dữ liệu sẽ được nhận trực tiếp văo câc biến)
sword defineArrOfStr(
ArrayDefine ArrDef[], int numcols)
ArrDef[ ](OUT): Mảng câc cột , mỗi phần tử lă một mảng chứa dữ liệu
Numcols(IN) : số cột trong phât biểu 8 24>Gọi hăm OCIStmtFetch() để
nhận dữ liệu 7>Gọi hăm sword fetchData() Mỗi lần nhận một row 9 Commit(có thể không có bước năy
cũng được
25>Gọi hăm OCITransCommit()
8>Gọi hăm transCommit(ub4 flags) 10 Disconnect
26>Gọi hăm OCIFreeHandle() để giải phóng context handle thì câc handle khâc tự động được giải phóng
Lưu ý : có thể giải phóng câc handle một câch tường minh
Sau đó gọi hăm 27>OCISessionEnd()
9>Gọi hăm disconnecd()
Như vậy để viết một chương trình dùng trực tiếp câc hăm OCI chuẩn thì phải cần khoảng 26 đến 33 lời gọi hăm . Với giao diện mới thì cần khoảng 7 đến 11 lời gọi hăm .
Trín đđy lă tất cả câc bước cho việc viết một chương trình OCI . Tuy nhiín tùy từng ứng dụng mă có thể không có đầy đủ câc bước năy .