OCI編程高級篇(十六) 直接路徑數據轉換和裝載
訪問www.tomcoding.com網站,學習Oracle內部數據結構,詳細文檔說明,下載Oracle的exp/imp,DUL,logminer,ASM工具的源代碼,學習高技術含量的內容。
在上一節中我們設置了字段的數據入口,那么接下來順理成章的就是把字段數組轉換成流數據,然后裝載流數據,直接路徑裝載就算完成了。這個順序沒錯,但是在這之前還有事情要做。首先要復位字段數組句柄的狀態,然后還要復位直接路徑流句柄的狀態,每次轉換裝載前都要復位這兩個狀態。這兩個函數分別為OCIDirPathColArrayReset()和OCIDirPathStreamReset(),下面看看他們的原型和參數。
sword OCIDirPathColArrayReset ( OCIDirPathColArray *dpca, OCIError *errhp );
dpca是一個輸入參數,直接路徑裝載字段數組句柄。
errhp是一個輸入參數,錯誤句柄,用于返回錯誤碼和錯誤信息文本。
sword OCIDirPathStreamReset ( OCIDirPathStream *dpstr, OCIError *errhp );
dpstr是一個輸入參數,直接路徑裝載流句柄。
errhp是一個輸入參數,錯誤句柄,用于返回錯誤碼和錯誤信息文本。
現在可以進行字段數組向直接路徑流的轉換了,函數為OCIDirPathColArrayToStream(),原型和參數如下。
sword OCIDirPathColArrayToStream ( OCIDirPathColArray *dpca,
OCIDirPathCtx const *dpctx,
OCIDirPathStream *dpstr,
OCIError *errhp,
ub4 rowcnt,
ub4 rowoff );
dpca是一個輸入參數,是直接路徑字段數組句柄。
dpctx是一個輸入參數,直接路徑上下文句柄,代表要裝載的對象。
dpstr是一個輸入/輸出參數,直接路徑流句柄。
errhp是一個輸入參數,錯誤句柄,用于返回錯誤碼和錯誤信息文本。
rowcnt是一個輸入參數,字段數組中要轉換的數據行數。
rowoff是一個輸入參數,從字段數組中第幾行開始轉換,一般情況下為0,如果一次轉換不能把字段數組中的全部行都轉換完,那么下次轉換就要從上次轉換的最后一行的下一行開始,這時rowoff就不是0了。
函數的返回值是OCI_SUCCESS說明字段數組中的數據全部轉換成了流數據。如果返回值是OCI_CONTINUE說明流數據的緩沖區太小,字段數組中的部分數據轉換成了流數據,這時屬性OCI_ATTR_ROW_COUNT返回本次成功轉換的數據行數。
轉換成流數據后,下一步就是裝載數據了,用到函數OCIDirPathLoadStream(),原型和參數如下。
sword OCIDirPathLoadStream ( OCIDirPathCtx *dpctx,
OCIDirPathStream *dpstr,
OCIError *errhp );
dpctx是一個輸入參數,直接路徑上下文句柄。
dpstr是一個輸入參數,直接路徑流句柄。
errhp是一個輸入參數,錯誤句柄,用于返回錯誤碼和錯誤信息文本。
裝載完數據流,下一步就是提交裝載的數據流,這時用到函數OCIDirPathFinish(),原型和參數如下。
sword OCIDirPathFinish ( OCIDirPathCtx *dpctx, OCIError *errhp );
dpctx是一個輸入參數,直接路徑上下文句柄。
errhp是一個輸入/輸出參數,錯誤句柄,用于返回錯誤碼和錯誤信息文本。
到這里,直接路徑裝載過程就算結束了,如果有更多的數據要裝載,那么可以循環設置數據入口,重置狀態,字段數組轉換成流數據,裝載流數據這幾個步驟,最后再提交裝載數據。

浙公網安備 33010602011771號