我在服务器上建立一个表格,例如:create table temp(num long,index long,x float,y float);
并且在数据库中已经插入了好几条记录,通过PL/SQL都能够select到记录数据
但是在客户端的程序中,我的代码流程如下:
(1)定义一个表对应的数据结构 
typedef struct TableInfoTAG
{
   long m_num;
   long m_index;
   float m_x;
   float m_y;
}TableInfo;
(2)主程序流程:
TableInfo pTableInfo[100];
按照OCI的要求初始化环境句柄、错误句柄、服务句柄、服务环境句柄、语句句柄
调用OCILogon成功
调用OCIStmtPrepare, SQL语句为 "select num,index,x,y from temp";
调用OCIDefineByPos,依次绑定列1到pTableInfo[0].m_num,列2到pTableInfo[0].m_index,依次类推
调用OCIDefineArrayOfStruct,指定偏移量为sizeof(TableInfo)
调用OCIStmtExecute执行
调用OCIStmtFetch取数据,但是返回的错误是OCI_NO_DATA
请问这是怎么回事?是不是我调用DefineByPos和DefineArrayOfStruct有问题
我就是想把从服务器上获得的数据存储到一个结构数组中,请问那位大虾知道如何实现。

解决方案 »

  1.   

    create table temp(num long,index long,x float,y float)????
    这个结构有问题吧。Oracle中的long可不是C里的long,
    你要表达的是
    create table temp(num int,index int,x float,y float)吧。
    否则还真取不到数据
      

  2.   

    建议先看一下SQL语法。
    批量取数据没有这么复杂,可以不用OCIDefineArrayOfStruct()----------------------------------------------------------- 
    《征服C/C++企业软件开发核心技术》 
    主题词 unix/linux 多线程 网络通讯 数据库 内存排错和性能分析 
    http://www.china-pub.com/209150