for example:scanf("%s",bianliangA);EXEC SQL DECLARE Ctab CURSOR FOR
SELECT cat_id
,obj_id
,obj_desc
FROM obj_tab
ORDER BY cat_id;EXEC SQL FETCH Ctab INTO
:tab.cat_id
,:tab.obj_id
,:tab.obj_desc;
//bianliangA与tab.cat_id做比较前,应该做什么处理呢?
//if(cmp(bianliangA,tab.cat_id))始终不相等,是不是从oracle取出的tab.cat_id有空格呢?
//该如何解决?thx
SELECT cat_id
,obj_id
,obj_desc
FROM obj_tab
ORDER BY cat_id;EXEC SQL FETCH Ctab INTO
:tab.cat_id
,:tab.obj_id
,:tab.obj_desc;
//bianliangA与tab.cat_id做比较前,应该做什么处理呢?
//if(cmp(bianliangA,tab.cat_id))始终不相等,是不是从oracle取出的tab.cat_id有空格呢?
//该如何解决?thx
c的可这样去掉空格:
char *strtrim(char *src)
{
char *ret=src,*str=src;
while(*str)
{
if(*str==' ')
{
*str=NULL;
break;
}
str++;
}
return ret;
}.....
EXEC SQL FETCH c_back_table
INTO :v_table_name;
if (sqlca.sqlcode<0)
{
LOG <<"读取游标c_back_table出错,代码:"
<<sqlca.sqlcode<<" 错误信息:"<<sqlca.sqlerrm.sqlerrmc<<endl;
return false;
}
/*若找不到记录,则中断*/
if (sqlca.sqlcode == SQLNOTFOUND)
break;
/*去掉空格*/
strtrim(v_table_name);
...
则在取得值后自动去掉空格(只要你定义的数据类型为可变长字符类型varchar2)
例如:先这样
EXEC ORACLE OPTION (char_map=string);
...
nname varchar2(20)
)
insert into wilertest values('abcde');
commit;wiler.cpp
#include <string>EXEC SQL INCLUDE SQLCA;
EXEC ORACLE OPTION(char_map=string);int main(int argc,char *argv[])
{
EXEC SQL BEGIN DECLARE SECTION;
char v_str[100];
EXEC SQL END DECLARE SECTION; string l_str;
/*连接数据库*/
ConnectLocal();
EXEC SQL
select nname
into :v_str
from wilertest
where rownum<2; l_str=string(v_str);
//---------
if (strcmp(l_str.c_str(),"abcde")==0)
printf(" 相等\n");
else
printf(" 不相等\n");
if (strcmp(v_str,"abcde")==0)
printf(" 相等\n");
else
printf(" 不相等\n");
return 1;
}
测试结果:
相等
相等都相等,不知道楼主的表结果如何,怎会不等?
我是不明白这句的意思,没又说清楚不管如何:
1.谢谢你耐心的回答
2.看来我需要系统的看本pro*c的书
EXEC ORACLE OPTION(char_map=string);字面理解为映射