Oracle常用的OCI函数 二
占位符:在程序中,一些SQL语句需要在程序运行时才能确定它的语句数据,在设计时可用一个占位符来代替,当程序运行时,在它准备好语句后,必须为每个占位符指定一个变量,即将占位符与程序变量地址结合,执行时,Oracle就从这些变量中读取数据,并将它们与SQL语句一起传递给Oracle服务器执行。OCI结合占位符时,它将占位符与程序变量关联起来,并同时要指出程序变量的数据类型和数据长度。 如:select * from test where name=:p1 and age>:p2 :p1和:p2为占位符 指示器变量:由于在Oracle中,列值可以为NULL,但在C语言中没有NULL值,为了能使OCI程序表达NULL列值,OCI函数允许程序为所执行语句中的结合变量同时关联一个指示符变量或指示符变量数组,以说明所结合的占位符是否为NULL或所读取的列值是否为NULL,以及所读取的列值是否被截取。
除SQLT_NTY(SQL Named DataType)外,指示符变量或指示符变量数组的数据类型为sb2,其值说明: 作为输入变量时:(如insert ,update语句中) =-1:OCI程序将NULL赋给Oracle表的列,忽略占位符结合的程序变量值 >=0:应用程序将程序变量值赋给指定列 作为输出变量时:(如select语句中) =-2:所读取的列数据长度大于程序变量的长度,则被截取。 =-1:所读取的值为NULL,输出变量的值不会被改变。 =0:数据被完整读入到指定的程序变量中 >0:所读取的列数据长度大于程序变量的长度,则被截取,指示符变量值为所读取数据被截取前的实际长度 三. OCI函数说明 注:红色为输入参数 蓝色为输出参数 ,否则为输入/出参数 示例以下面结构作为说明
sword swResult; OCIBind* hBind; OCIDefine* hDefine; OCIStmt *stmtp OCIError *errhp; OCIStmt *stmtp OCISvcCtx * svchp OCIEnv * envhpp; OCISession * usrhp; sb2 sb2aInd[30]; //指示器变量,用于取可能存在空值的字段 Typedef strcut { char tname[40]; int age; } t_std; typedef struct { sb2 sb2_tname[100]; sb2 sb2_age[100]; } stdInd_T; //指示器数组 typedef struct { ub2 ub2_tname[100]; ub2 ub2_age[100]; } stdLen_T; //字段长度 t_std tstd[100]; //数组变量,用于批量操作
stdInd_T tstdInd; stdLen_T tstdLen; stdLen_T tstdRet; t_std std;
各函数数明
1.创建OCI环境 sword OCIEnvCreate( OCIEnv **envhpp, //OCI环境句柄指针 ub4 mode, //初始化模式:OCI_DEFAULT/OCI_THREADED 等 CONST dvoid *ctxp, CONST dvoid *(*malicfp)(dvoid *ctxp,size_t size), CONST dvoid *(ralocfp)(dvoid *ctxp,dvoid *memptr,size_t newsize), CONST void *(*mfreefp)(dvoid *ctxp,dvoid *memptr), Size_t xstramemsz, Dvoid **usrmempp ) eg : swResult = OCIEnvCreate(&envhpp, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL); if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)
return FALSE; sword OCIInitialize (
ub4 mode, CONST dvoid *ctxp, CONST dvoid *(*malocfp) (/* dvoid *ctxp, size_t size _*/), CONST dvoid *(*ralocfp) (/*_ dvoid *ctxp, dvoid *memptr, size_t newsize _*/), CONST void (*mfreefp) (/*_ dvoid *ctxp, dvoid *memptr _*/) ); sword OCIEnvInit ( 本文出自 51CTO.COM技术博客OCIEnv **envhpp, ub4 mode, size_t xtramemsz, dvoid **usrmempp ); |


goodgoodstudy
博客统计信息
热门文章
最新评论
友情链接