问题如题,比如我要执行的SQL语句形式如下:select * from table1,在SQL语句执行前并不知道table1中表的结构,即字段数目、字段类型、字段长度等均不知道,所以在创建结构体的时候结构体中的各个字段只能利用指针动态创建,即结构体中的各个字段是动态的。在这种情况下如何绑定动态结构体来实现批量查询?如果结构体是静态的,即结构体中的各个字段的长度是确定的,此时我能实现批量查询的功能,但在动态结构体的情况下我的代码运行结果不对且报非法内存访问错误,跪求大神指导!!!

解决方案 »

  1.   

    到user_tab_columns里查询当前表里所有的字段及长度类型,然后匹配定义
      

  2.   

    to jdsnhan:
              表中各个字段的信息(字段名,类型,长度等)我可以通过oci函数获取到,现在的问题是这些信息的获取只有在程序运行时获取,所以我的结构体必然是用指针来定义,在这种情况下我如何通过oci函数来实现对表中数据的批量读取,后来细读oracle的oci文档发现OCIDefineArrayOfStruct函数for a static array define,所以通过OCIDefineArrayOfStruct函数这条路来批量读取表中数据貌似被堵死了,不知有其它方式实现否?求大神指导!!!我现在能实现读取表中任意单条记录,只有批量操作不知如何实现了。
      

  3.   


    看看OCI的samples里头有没有相关的代码。
    个人感觉,没有必要读取时批量调用。因为你可以一次fetch多条记录,自己进行缓存处理。而且代码更易维护。
      

  4.   

    to iihero:
    我试图在oracle的安装目录下找过oci的samples,可没找到,不清楚有没有。
    另外你说的一次fetch多条记录,这多条记录存在哪啊?本来我定义fields为指针的结构体的目的就是为了存储fetch的多条记录的,可好像这样行不通,求大神指导!!!
      

  5.   

    OCI不太熟悉,但是从SQL层面来做的话,应该是先从user_tab_columns 读取你的表的列名
    然后用动态拼接SQL来实现数据的读取