.Truy cập vă lưu trữ thông tin kiểu object Descriptor Object

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

Descriptor Object

Khi tạo ra một kiểu bằng phât biểu CREATE TYPE nó được lưu trữ trong server vă liín kết với một Type Descriptor Object (TDO) . Ngoăi ra CSDL chứa câc descriptor object gồm mỗi thuộc tính dữ liệu của kiểu , mỗi method của kiểu , mỗi tham số của mỗi method vă câc kết quả trả về bới câc method .

Table 9-19 OCI Datatypes Associated with Type Information

Information Type OCI Datatype

Type OCIType

Type Attributes Collection Elements

Method Parameters Method Results OCITypeElem

Method OCITypeMethod

Một số hăm OCI ( bao gồm OCIBindObject() vă OCIObjectnew() ) cần một TDO như một tham số đầu văo . Một ứng dụng có thể nhận một TDO bằng câch gọi hăm OCITypeByName() nó sẽ nhận TDO trong một biến OCIType . Có thể nhận TDO để truyền cho câc lời gọi khâc .

Chương VII : BINDING AND DEFINING IN OBJECT APPLICATIONS I. Binding

Chương năy nói về răng buộc của câc named data type vă REF . 1 . Named data type bind

Đối với named data type bind thì cần gọi hăm để răng buộc sau khi gọi hăm

GVHD :KS.Bùi Hoăi Thắng

cụ thể để răng buộc kiểu Object . Ứng dụng sử dụng hăm năy khi nhận dữ liệu từ một bảng có một cột lă một kiểu dữ liệu object .

Hăm OCIBindObject() nhận một TDO đại diện cho named data type . Khi một named data type được tạo ra thì TDO của OCIType được tạo ra vă lưu trong CSDL . Một ứng dụng có thể thu được một TDO thông qua gọi hăm OCIBTypeByName() . Hăm OCIBindObject() cũng căi đặt biến chỉ thị hoặc cấu trúc cho named data type bind .

Khi răng buộc một named data type sử dụng hằng SQLT_NTY để chỉ phạm vi hiện tại của biến trong chương trình . SQLT_NTY chỉ một cấu trúc C mô tả named data type . Một con trỏ trỏ đến cấu trúc năy được đưa đến lời gọi hăm rang buộc đó (bind call) .

Để lăm việc với named data type có thể sử dụng 3 bind call trong một số trường hợp Ví dụ để răng buộc câc named data type của1 array tĩnh đến mộtbảngcủa PL/SQL phải gọi 3 hăm

OCIBindByName() , OCIBindArrayOfStruct() , OCIBindObject() 2 . Binding REF

Binding REF lă một quâ trình gồm 2 bước . Đầu tiín gọi hăm OCIBindByName() hoặc

OCIBindByPos() rồi sau đó gọi hăm OCIBindObject() .

Khi câc REF sử dụng kiểu dữ liệu SQLT_REF thì chương trình thay đổi trong phạm vi kiểu

OCIRef* .

Một thông tin quan trọng khi lăm việc với named data type vă REF .Đó lă câch sử dụng câc pointer định vị bộ nhớ vă câc biến chỉ thị :

 Nếu kiểu dữ liệu lă SQLT_NTY thì tham số chỉ cấu trúc của hăm

OCIBindOject() lă (dvoid **indpp) vă tham số vô bị phớt lờ .

 Nếu kiểu dữ liệu lă SQLT_REF thì tham số vô hướng được sử dụng vă tham số chỉ cấu trúc bị phớt lờ .

 Việc sử dụng câc cấu trúc chỉ điểm lă tùy ý . Có thể cho indpp=NULL trong lời gọi hăm OCIBindObject() .

 Tham số indsp(chỉ kích thước của cấu trúc ) vă tham số pgvp (chỉ kích thước của biến ) khi gọi hăm OCIBindObject() lă tùy ý , có thể gân cho chúng bằng NULL .

Để răng buộc mảng câc named data type hoặc REF user phải đưa văo một mảng pointer chỉ đến vùng đệm tương ứng .

II. Defining

Phần năy đưa ra câch định nghĩa named data type vă REF 1 . Định nghĩa named data type cho câc biến xuất

Để định nghĩa named data type (object type , nested table , varray) cần thực hiện theo thứ tự sau :

 Gọi hăm OCIDefineByPos() vă phải định rõ SQLT_NTY trong tham số dty

 Gọi hăm OCIDefineObject() , con trỏ vùng đệm dữ liệu bị phớt lờ vă thím câc thuộc tính văo định nghĩa named data type đê được căi đặt sử dụng câc thuộc tính OCI Define Object . Kiểu dữ liệu hằng SQLT_NTY được định rõ cho named data type . Trong trường hợp năy ứng dụng nhận dữ liệu kết quả văo named data type mă được mô tả bởi ngôn ngữ chủ (host language). Trong hầu hết câc trường hợp , Object Type Translator tạo ra một cấu trúc C để nhận kết quả . Khi gọi hăm OCIDefineObject() thì sẽ có một pointer trỏ đến địa chỉ của cấu trúc C vă Object được tạo ra .

2 . Định nghĩa câc biến xuất REF

Bao gồm hai bước :

+ Gọi hăm OCIDefineByPos() vă SQLT_REF được đưa văo tham số dty

+ Gọi hăm OCIDefineObject()

Dữ liệu kết quả sẽ được đưa văo biến kiểu OCIRef* , sau đó REF năy được sử dụng như một thănh phần của object .

3 . Những thông tin hỗ trợ cho việc định nghĩa named data type , REF vă PL/SQL OUT bind

Một PL/SQL OUT bind việc răng buộc một nơi chứa dữ liệu đến một biến xuất trong khối PL/SQL .

Nếu kiểu dữ liệu được định nghĩa lă SQLT_NTY thì chỉ thị tham số cấu trúc (indicator struct parameter ) của hăm OCIDefineObject() lă (dvoid **indpp) vă chỉ thị vô hướng bị phớt lờ . Nếu kiểu dữ liệu được định nghĩa lă SQLT_REF thì ngược lại .

Việc sử dụng câc cấu trúc chỉ thị lă tùy ý . User có thể đưa pointer chỉ NULL văo tham số

indpp .

Trong một định nghĩa SQL hoặc Pl/SQL bind nếu user chỉ định trước vùng nhớ cho câc biến xuất hoặc indicator thì sau đó việc chỉ định năy được dùng để chứa kết quả vă tất cả vùng nhớ phụ bị dealallocate . Việc chỉ định vùng nhớ trước hoặc lă nơi cất hoặc lă vùng nhớ riíng của client .

Nếu một ứng dụng muốn chỉ định vùng nhớ từ vùng nhớ riíng thì nó phải chắc rằng không có vùng nhớ phụ trong object .

Trong định nghĩa SQL hoặc PL/SQL bind đưa NULL cho biến xuất hoặc indicator thì việc chỉ định vùng nhớ cho chúng được thực hiện bởi OCI .

Nếu một kiểu SQLT_NTY của object lă NULL thì chỉ có indicator NULL được chỉ định vă do đó được chứa trong phần tử NULL của object . Object mức trín hoăn toăn không được chỉ định .

Một ứng dụng có thể câc indicator bằng hăm OCIObjectFree() . Nếu có một object mức trín thì indicator được giải phóng khi object mức trín được giải phóng bằng hăm OCIObjectFree() . Nếu object lă phần tử null thì không có object mức trín vì vậy indicator phải được giải phóng riíng .

Hai tham số indsp pgvsp lă tùy ý có thể cho chúng bằng NULL nếu không cần thiết .

Để định nghĩa mảng câc named data type hoặc REF thì user cần đưa văo một mảng câc pointer trỏ vùng đệm của kiểu tương ứng . Tương tự mảng câc indicator vô hướng (đối với kiểu SQLT_REF) hoặc mảng câc pointer trỏ đến câc cấu trúc indicator (đối kiểu SQLT_NTY) cần được đưa văo .

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

Tải bản đầy đủ (DOC)

(105 trang)
w