在上一节中我们设置了字段的数据入口,那么接下来顺理成章的就是把字段数组转换成流数据,然后装载流数据,直接路径装载就算完成了。这个顺序没错,但是在这之前还有事情要做。首先要复位字段数组句柄的状态,然后还要复位直接路径流句柄的状态,每次转换装载前都要复位这两个状态。这两个函数分别为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是一个输入/输出参数,错误句柄,用于返回错误码和错误信息文本。
到这里,直接路径装载过程就算结束了,如果有更多的数据要装载,那么可以循环设置数据入口,重置状态,字段数组转换成流数据,装载流数据这几个步骤,最后再提交装载数据。