#绑定、定义和描述函数

# OCIBindArrayOfStruct()

该函数用于设置静态数组绑定的跳过参数。

# OCI函数原型

sword OCIBindArrayOfStruct ( OCIBind     *bindp,
                             OCIError    *errhp,
                             ub4          pvskip, 
                             ub4          indskip, 
                             ub4          alskip, 
                             ub4          rcskip );

# 参数说明

参数名 含义
bindp (IN/OUT) 绑定结构的句柄
errhp (IN/OUT) 一个错误句柄,当出现错误时可以获取诊断信息
pvskip (IN) 用于下一个数据值的跳过参数
indskip (IN) 用于下一个指示符值或结构的跳过参数
alskip (IN) 用于下一个实际长度值的跳过参数
rcskip (IN) 用于下一列级别返回代码值的跳过参数

# 规格

该函数支持如下的调用方式:

参数 有效值
pvskip 除0以外的数值
indskip 0或其他合理数值
alskip 0或其他合理数值
rcskip 0或其他合理数值

# 其他说明

此api在绑定时为可选项,可以设置批量绑定参数的步长。

# OCIBindByPos()

该函数用于在程序变量和 SQL 语句或 PL/SQL 块中的占位符之间创建关联。

# OCI函数原型

sword OCIBindByPos ( OCIStmt       *stmtp, 
                     OCIBind      **bindpp,
                     OCIError      *errhp,
                     ub4            position,
                     void          *valuep,
                     sb4            value_sz,
                     ub2            dty,
                     void          *indp,
                     ub2           *alenp,
                     ub2           *rcodep,
                     ub4            maxarr_len,
                     ub4           *curelep, 
                     ub4            mode );

# 参数说明

参数名 含义
stmtp (IN/OUT) 正在处理的SQL或PL/SQL语句的语句句柄
bindpp (IN/OUT) 此调用隐式分配的绑定句柄的地址。绑定句柄维护该特定输入值的所有绑定信息。当语句句柄被释放时,该句柄被隐式释放
errhp (IN/OUT) 一个错误句柄,当出现错误时可以获取诊断信息
position (IN) 由位置指定的占位符属性
valuep (IN/OUT) 数据值的地址或dty参数中指定类型的数据值数组。
可以指定一个数据值数组,用于映射到PL/SQL表或为SQL多行操作提供数据。当提供绑定值的数组时,这在OCI术语中被称为数组绑定。对于LOB,缓冲区指针必须是指向OCILobLocator类型的LOB定位器的指针。
value_sz (IN) 此绑定变量的任何数据值(使用valuep传递)的最大可能大小(以字节为单位)。此大小应始终是以字节为单位的大小。
在数组绑定的情况下,这是任何元素的最大大小,实际大小在alenp参数中指定
dty (IN) 要绑定的值的数据类型
indp (IN/OUT) 指向指示器变量或数组的指针
alenp (IN/OUT) 指向数组元素实际长度的数组的指针
rcodep (OUT) 指向列级返回代码数组的指针
对于动态绑定,将忽略此参数
maxarr_len (IN) 最大数组长度参数(用户数组可以容纳的元素的最大可能数量)
仅用于PL/SQL索引表绑定
curelep (IN/OUT) 当前数组长度参数(指向执行操作之前或之后数组中实际元素数的指针)
仅用于PL/SQL索引表绑定
mode (IN) 支持的有效模式

# 规格

该函数支持如下的调用方式:

参数 有效值
dty (IN) SQLT_INT
SQLT_STR
SQLT_AFC
SQLT_LNG
SQLT_FLT
SQLT_TIMESTAMP
SQLT_INTERVAL_DS
SQLT_VNU
SQLT_BDOUBLE
SQLT_BLOB
SQLT_CLOB
rcodep NULL
mode OCI_DEFAULT
*bindpp NULL
maxarr_len 0
curelep NULL
position >= 1
mode OCI_DEFAULT
OCI_DATA_AT_EXEC

# 其他说明

无特殊说明。

# OCIDefineByPos()

该函数用于将选择列表中的项目与类型和输出数据缓冲区相关联。

# OCI函数原型

sword OCIDefineByPos ( OCIStmt     *stmtp, 
                       OCIDefine  **defnpp,
                       OCIError    *errhp,
                       ub4          position,
                       void        *valuep,
                       sb4          value_sz,
                       ub2          dty,
                       void        *indp,
                       ub2         *rlenp,
                       ub2         *rcodep,
                       ub4          mode );

# 参数说明

参数名 含义
stmtp (IN/OUT) 请求的SQL查询操作的句柄
defnpp (IN/OUT) 指向定义句柄的指针的指针
errhp (IN/OUT) 一个错误句柄,当出现错误时可以获取诊断信息
position (IN) 此值在选择列表中的位置
valuep (IN/OUT) 指向dty参数中指定类型的缓冲区或缓冲区数组的指针
value_sz (IN) 每个valuep缓冲区的大小(以字节为单位)
dty (IN) 数据类型
indp (IN) 指向指示器变量或数组的指针
rlenp (IN/OUT) 指向获取的数据长度数组的指针
rcodep (OUT) 指向列级返回代码数组的指针
mode (IN) 支持的有效模式

# 规格

该函数支持如下的调用方式:

参数 有效值
dty (IN) SQLT_INT
SQLT_STR
SQLT_AFC
SQLT_CHR
SQLT_FLT
SQLT_TIMESTAMP
SQLT_INTERVAL_DS
SQLT_BLOB
SQLT_CLOB
mode OCI_DEFAULT
defnpp NULL
position >= 1

# 其他说明

目前输出数据缓冲区取数据不支持变长类型截断,取结果集数据时,所有变长类型遇到大小不足的输出数据缓冲区会报错。

# OCIDescribeAny()

该函数用于描述现有模式和子模式对象。

# OCI函数原型

sword OCIDescribeAny ( OCISvcCtx       *svchp,
                       OCIError        *errhp,
                       void            *objptr,
                       ub4              objptr_len,
                       ub1              objptr_typ,
                       ub1              info_level,
                       ub1              objtyp,
                       OCIDescribe     *dschp );

# 参数说明

参数名 含义
svchp (IN) 服务上下文句柄
errhp (IN/OUT) 一个错误句柄,当出现错误时可以获取诊断信息
objptr (IN) 此参数可以是:
1.包含要描述的对象的名称的字符串。必须是由上一次调用OCIEnvNlsCreate()charset参数指定的编码。
2.指向TDO的REF的指针(对于类型)。
3.指向TDO的指针(用于类型)。
通过传递objprt_typ的适当值来区分这些情况。此参数必须为非NULL
objnm_len (IN) objptr指向的名称字符串的长度
如果传递名称,则必须为非零
如果objptr是指向TDO或其“REF”的指针,则可以为零
objptr_typ (IN) objptr中传递的对象的类型
info_level (IN) 保留以备将来扩展
传递OCI_DEFAULT
objtyp (IN) 正在描述的架构对象的类型
dschp (IN/OUT) 一个描述句柄,该句柄在调用后填充了有关对象的描述信息
必须为非NULL。

# 规格

该函数支持如下的调用方式:

参数 有效值
objptr_typ OCI_OTYPE_NAME
objtyp OCI_PTYPE_VIEW、OCI_PTYPE_TABLE
objptr 非NULL
objptr_len 非0
info_level 0

# 其他说明

无特殊说明。

# OCIBindDynamic

注册动态数据分配的用户回调。

# OCI函数原型

sword OCIBindDynamic ( OCIBind     *bindp,
                       OCIError    *errhp,
                       void        *ictxp, 
                       OCICallbackInBind         (icbfp)(
                                void             *ictxp,
                                OCIBind          *bindp,
                                ub4               iter, 
                                ub4               index, 
                                void            **bufpp,
                                ub4              *alenp,
                                ub1              *piecep, 
                                void            **indpp ),
                                void             *octxp,
                       OCICallbackOutBind        (ocbfp)(
                                void             *octxp,
                                OCIBind          *bindp,
                                ub4               iter, 
                                ub4               index, 
                                void            **bufpp, 
                                ub4             **alenpp,
                                ub1              *piecep,
                                void            **indpp, 
                                ub2             **rcodepp ) );

# 参数说明

参数名 含义
bindp (IN/OUT) 绑定句柄。
errhp (IN/OUT) 一个错误句柄,当出现错误时可以获取诊断信息。
ictxp (IN) 回调函数icbfp所需的上下文指针。
icbfp (IN) 在运行时返回指向 IN 绑定值或片段的指针的回调函数。
octxp (IN) 回调函数ocbfp所需的上下文指针。
ocbfp (IN) 在运行时返回指向 OUT 绑定值或片段的指针的回调函数。

# 规格

该函数支持如下的调用方式:

参数 有效值
icbfp 非NULL
octxp 保留参数,不使用
ocbfp 保留参数,不使用

# 其他说明

目前仅支持回调函数返回OCI_CONTINUE,仅支持*piecep赋值为OCI_ONE_PIECE。

# OCIDefineDynamic

如果在OCIDefineByPos()或OCIDefineByPos2()中选择了OCI_DYNAMIC_FETCH模式,则设置所需的附加属性。

# OCI函数原型

sword OCIDefineDynamic ( OCIDefine   *defnp,
                         OCIError    *errhp,
                         void        *octxp, 
                         OCICallbackDefine      (ocbfp)(
                                  void          *octxp,
                                  OCIDefine     *defnp,
                                  ub4            iter, 
                                  void         **bufpp,
                                  ub4          **alenpp,
                                  ub1           *piecep,
                                  void         **indpp,
                                  ub2          **rcodep );

# 参数说明

参数名 含义
defnp (IN/OUT) 定义结构句柄。
errhp (IN/OUT) 一个错误句柄,当出现错误时可以获取诊断信息。
octxp (IN) 指向回调函数的上下文。
(IN) 指向回调函数。这是在运行时调用的,以获取指向缓冲区的指针,在该缓冲区中将检索所获取的数据或其一部分。回调还指定指标、返回码以及数据片和指标的长度。

# 规格

该函数支持如下的调用方式:

参数 有效值
ocbfp 非NULL

# 其他说明

目前仅支持回调函数返回OCI_CONTINUE,仅支持*piecep赋值为OCI_ONE_PIECE。

目前输出数据缓冲区取数据不支持变长类型截断,取结果集数据时,所有变长类型遇到大小不足的输出数据缓冲区会报错。