博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

Gan's Blog

小记一些个人学习的东西, 如有版权问题请及时告之! :::欢迎转载,已经是转载的请使用原地址::: 转载请注名来源!

Unix/Linux、Oracle、数据存储、备份、复制、ETL、数据仓库
   gan.cublog.cn
关于作者  
姓名:gan
年龄:27
Email: ghk_love#163.com
职业:Oracle, Unix/Linux, C
!>> 想全了50%就可以行动了, 在行动中思考总结!

我的分类  




OCI 指示器变量!
现在要实现这样的功能!

create table tab1(a int, b varchar(10));

insert into tab1 values(1, 'abc');
insert into tab1 values(2, 'abcd');
insert into tab1 values(3, null);
insert into tab1 values(4, 'abcx');

采用OCI一次bind来实现,由于其中有字段值为null,上次绕开了这个问题来实现的,现在没办法绕了就得解决。 今天学习了一下! (看来还是直面解决问题的好,今天不解决明天还是一样会来的)
sword OCIBindByPos ( OCIStmt      *stmtp, 
OCIBind **bindpp,
OCIError *errhp,
ub4 position,
dvoid *valuep,
sb4 value_sz,
ub2 dty,
dvoid *indp,
ub2 *alenp,
ub2 *rcodep,
ub4 maxarr_len,
ub4 *curelep,
ub4 mode );
indp的合理使用就可以解决了,原来一致用NULL的。看看OCI文档就明白了,
Input Indicator Value Action Taken by Oracle
-1 Oracle assigns a NULL to the column, ignoring the value of the input variable.
>=0 Oracle assigns the value of the input variable to the column.


----------
下面是一篇不错的OCI文章! 引用了指示变量这一小部分!

指示器变量:
        由于在Oracle中,列值可以为NULL,但在C语言中没有NULL值,为了能使OCI程序表达NULL列值,OCI函数允许程序为所执行语句中的结合变量同时关联一个指示符变量或指示符变量数组,以说明所结合的占位符是否为 NULL或所读取的列值是否为NULL,以及所读取的列值是否被截取。
        除SQLT_NTY(SQL Named DataType)外,指示符变量或指示符变量数组的数据类型为sb2,其值说明:
        作为输入变量时:(如insert ,update语句中)

From: http://www.chinaunix.net/jh/19/530742.html

=========================================================
2008-08-04 今天有遇到这个问题:

sword OCIDefineByPos ( OCIStmt     *stmtp, 
OCIDefine **defnpp,
OCIError *errhp,
ub4 position,
dvoid *valuep,
sb4 value_sz,
ub2 dty,
dvoid *indp,
ub2 *rlenp,
ub2 *rcodep,
ub4 mode );
用Define取数据的时候也必须设置indp为什么呢? 我原来只设置了一个rlenp,个人认为一个长度变量就可以控制取出来的数据长度的,但我细细想来不是这样的,null数据怎么办呢?

注意:null数据可以长度为0的数据,在Oracle中他们是不同的数据,那这样长度变量就没办法表示了。

 发表于: 2008-06-30,修改于: 2008-08-04 20:30 已浏览239次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.01393

京ICP证041476号