你是不是用了nvl了,用了之后会变

解决方案 »

  1.   

    具体程序如下:其中error() 是一个让它显示一下用于调试的函数sprintf(sqlcmd, "SELECT * FROM btbsuptran  ORDER BY supseqno");
     EXEC SQL PREPARE preuser FROM :sqlcmd;
     EXEC SQL DECLARE curInquser CURSOR FOR preuser;
     EXEC SQL OPEN curInquser;
     if( sqlca.sqlcode )
        {
     error(__FILE__, __LINE__, "ERR:Open curuser SqlCmd:%s Error:%d",
     sqlcmd, sqlca.sqlcode);
     return(CODE_SYSTEM_ERR);
        }
     while(1)
        {
     memset(&stbtbsuptran, 0, sizeof(btbsuptran_stru));
     memset(&stbtbsuptran_ind, 0, sizeof(btbsuptran_ind_stru)); EXEC SQL FETCH curInquser INTO :stbtbsuptran:stbtbsuptran_ind;
    error(__FILE__,__LINE__,"2ttttttt---%d",stbtbsuptran.supamt);//此处就为1546188427了
         ……
         ……
         }
    其实我的问题是想把一个int型数据取出来打包发给前台,可是前台收到的是整型错误(本该是字符流),但是我发现double型的却可以,它取出来时值就变了,而int的没变,所以不行,想不通
      

  2.   

    fetch之后没有判断是否取到数据,要先判断是否有数据,否则数据库返回NULL,OS会给一个随机值(无意义)建议改动:
    EXEC SQL FETCH curInquser INTO :stbtbsuptran:stbtbsuptran_ind;
    if (sqlca.sqlcode==1403||sqlca.sqlcode==100)break;
    ...
      

  3.   

    哦,现在发现int可以了,原来是前台接收有错,不过int取出是不变的,double是变的,难道oracle就是这样的吗?
      

  4.   

    "不过int取出是不变的,double是变的"不太明白,能详细解释一下吗?
      

  5.   

    我从数据库里fech出一个int型数据,它的值等于数据库里的值,比如说5,就都是5,而我取出一个double型的数据出来,它数据库里是1.11,可取到外面变成了1546188427(程序如上),当然这是对的,因为我打包发到前台后显示为1.11,可不明白怎么回事,是不是oracle就是这样的吗?
      

  6.   

    double型的数据是不是应该这样显示:(或许我没太理解你的程序)
    error(__FILE__,__LINE__,"2ttttttt---%.2f",stbtbsuptran.supamt);//
                                        ....