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

解决方案 »

  1.   

    你用c的吗?不是c++吧?
    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);
    ...
      

  2.   

    c++可用string来定义变量
    则在取得值后自动去掉空格(只要你定义的数据类型为可变长字符类型varchar2)
    例如:先这样
    EXEC ORACLE OPTION (char_map=string); 
    ...
      

  3.   

    create table wilertest(
      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;
    }
    测试结果:
    相等
    相等都相等,不知道楼主的表结果如何,怎会不等?
      

  4.   

    EXEC ORACLE OPTION(char_map=string);
    我是不明白这句的意思,没又说清楚不管如何:
    1.谢谢你耐心的回答
    2.看来我需要系统的看本pro*c的书
      

  5.   

    网上搜一下吧,我去几次书店都没货,还是网上定购好点
    EXEC ORACLE OPTION(char_map=string);字面理解为映射