2012-06-07 8 views
2

Я хочу сделать выборку массива для DATE в оракуле со следующим кодом. Он компилируется в порядке и экспортирует все другие типы данных правильно, за исключением типа DATE. В программе указано, что «ora-32146 не может выполнить операцию с нулевой датой».Где я ошибаюсь? SetDataBuffer для DATE

Любой может видеть, где я ошибаюсь?

Statement *stmt = conn->createStatement("SELECT AGE,CASH2, BIRTHDATE from myTable2"); /*, CASH1, CASH2, BIRTHDATE*/ 
    //stmt->setMaxParamSize(1,sizeof(Number)); 
    ResultSet *rs=stmt->executeQuery(); 
    string myName[400]; 
    int myAge[400]; 
    double myCash1[400]; 
    double myCash2[400]; 
    oracle::occi::Date myBirthDate[400]; 

    //rs->setDataBuffer(1,myName,OCCI_SQLT_STR,sizeof(string)); 
    rs->setDataBuffer(1,myAge,OCCIINT,sizeof(int)); 
    rs->setDataBuffer(2, myCash2, OCCIBDOUBLE, sizeof(double),NULL); 
    rs->setDataBuffer(3, myBirthDate,OCCI_SQLT_DATE, sizeof(oracle::occi::Date),NULL); 

    while (rs->next(200)==ResultSet::DATA_AVAILABLE) 
    { 
     //cout << "Exporting batch..." << endl; 
     for(size_t i=0;i<rs->getNumArrayRows();i++) 
     { 
      //cout << myName[i] << endl; 
      cout << myAge[i] << endl; 
      //cout << myCash1[i] << endl; 
      cout << myCash2[i] << endl; 
      int y; 
      unsigned int m,d,h,mm,s; 
      myBirthDate[i].getDate(y,m,d,h,mm,s); 
      cout << y <<"-"<<m<<"-"<<s << endl; 
     } 
    } 

ответ

2

Обдумал это.

использование rs-> setDataBuffer (3, myBirthDate, OCCI_SQLT_DAT, 7, NULL);

все работает.

Нет хорошего документа на OCCI ...

Смежные вопросы