我想用OCI方式编程写数据库,其中某个函数提供输入参数char* sqlStr,只要我把sqlStr设置成为SQL语句的形式:比如sqlStr = "insert into MyTable (rawData) values ('ef1415')",就可以在rawData字段(raw类型)插入值12ef1298,
我想用如下语句格式化成符合规范的sql语句:
char p[4] = {0xef, 0x14,0x15,'\0'}//准备写到数据库的内存
  char SqlStr[300];  
sprintf(SqlStr, "insert into MyTable(rawData) values ('%.*s')",3,p);//%.*s,3,p 表示格式化p以后的3个字节到字符串sqlStr中
但我发现用OCI函数执行此sqlstr语句,失败,报错:ORA-01465: invalid hex number
已知OCI函数本身没错,错就错在上述格式化sql语句sprintf,但是,那句执行完后明明sqlstr就是"insert into MyTable (rawData) values ('ef1415')"的形式,用pl/sql客户端直接执行此句sql,是成功的,怎么格式化成字符串,用oci函数执行就不行了?我程序中要写好多内存的内容到raw字段,不可能在sql语句中写死某段内存的内容,真糟糕!
另外:我发现...values (hextoraw('%.*s'))",3,p);//也报同样的错误:ORA-01465: invalid hex number可以用sprintf(SqlStr, "insert into MyTable(rawData) values (UTL_RAW.CAST_TO_RAW('%.*s'))",3,p);//执行此语句不再报错,但我发现内存p的第一个字节如果稍大,比如0xef写到数据库便成了很奇怪的三个字节:EFBFBD,(因为不是可显示的ascii码值???) p的后两个字节0x14,15大概是因为值小的缘故,写的是实际值,为什么?
多谢!