在Proc的程序开发中,发现程序中对于char类型与数据库char(1)类型之间的转换的一些问题,整理如下:
1. 在C程序中变量类型为char 类型, 数据库对应表字段类型为Number类型,按照C语言开发模型,我们知道char类型内部就是数字类型,也就是说 char 类型是可以转换为int 类型的, 那么在proc环境下,外部数据类型为char类型,那么对应的数据库类型应该是char,varchar2类型, 如果对应为number类型,程序在执行的时候就会报错 ORA-1722 Invalid Number。
2. C程序类型为char类型, 数据库对应类型为char(1), 如果c程序类型的数据,比如 变量 cBitFlag= 255, 如果插入数据,就会报SQL
ORA - 1400 错误01400, 00000, "cannot insert NULL into (%s)",如果cBitFlag=128, 则插入不报错,但是在查询的时候,查出来的值就是FLAG=[ffffff80],打印是按十进制方式打印,那就说明读之后的数据结果有问题,如果插入值 cBitFlag = 12 小于128 ,那么插入就没问题,读数据的时候也是没有问题的。并且和初始结果相等。
3. C程序类型为unsigned char 类型,数据库对应表字段为char(1)类型,插入cBitFlag= 128, 插入不会出错,再次查询的结果值为128,不会出现乱码, 当cBitFlag=158, 插入数据库不会出错,但是查询该记录的时候,cBitFlag = 32, 当测试值cBitFlag=130,插入记录,再次查询,返回结果仍是32,如果C程序cBitFlag的值小于128,那么插入值是多少,查询值便是多少。
阅读(2116) | 评论(0) | 转发(0) |