PHẦN II I: XĐY DỰNG GIAO DIỆN LẬP TRÌNH OCI A-Tóm tắt lý thuyết

Một phần của tài liệu LVTN - Xay dung giao dien lap trinh OCI.doc (Trang 101 - 104)

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 .

Một phần của tài liệu LVTN - Xay dung giao dien lap trinh OCI.doc (Trang 101 - 104)