informix 的动态sql是可以解决这样的问题,因为informix是直接先运行select语句,然后将得到的结果集按字段截取,这样就可以实现上述函数。
但是oracle在运行动态sql的时候select出的值必须先制定存储在变量中,所以麻烦的就在这里。
不知道有没有什么方法解决,本人oracle动态sql还不是很熟练,正在学习中,望各位大神能指导一下。

解决方案 »

  1.   

    放到应用中实现应该会简单点,不一定要用oracle存储过程实现如.NET可以直接运行select语句,将执行结果存入到datatable对象中,然后就可以取出每个字段的值
      

  2.   

    写个包,可以通过函数同名重载来根据参数类型和个数的不同调用具体的函数返回不同类型的值我想实现这个函数的目的是要完成linux c 下对oracle数据库操作的二次封装,这样方便后续开发。
    int select(*mysql,int filednum,...) ; 这就是函数实现方式。
    调用该函数的时候只需要传入具体的sql语句和参数,就能返回该sql语句查询得到的值。所以针对不同的sql语句,参数个数不一致,参数类型也不一致。
      

  3.   

    写个包,可以通过函数同名重载来根据参数类型和个数的不同调用具体的函数返回不同类型的值我想实现这个函数的目的是要完成linux c 下对oracle数据库操作的二次封装,这样方便后续开发。
    int select(*mysql,int filednum,...) ; 这就是函数实现方式。
    调用该函数的时候只需要传入具体的sql语句和参数,就能返回该sql语句查询得到的值。所以针对不同的sql语句,参数个数不一致,参数类型也不一致。
    要不你就设计成1个参数吧,SQL语句(传入参数)。
    返回类型为一个动态游标,这样就不会受参数个数和类型的限制了
      

  4.   

    写个包,可以通过函数同名重载来根据参数类型和个数的不同调用具体的函数返回不同类型的值我想实现这个函数的目的是要完成linux c 下对oracle数据库操作的二次封装,这样方便后续开发。
    int select(*mysql,int filednum,...) ; 这就是函数实现方式。
    调用该函数的时候只需要传入具体的sql语句和参数,就能返回该sql语句查询得到的值。所以针对不同的sql语句,参数个数不一致,参数类型也不一致。
    要不你就设计成1个参数吧,SQL语句(传入参数)。
    返回类型为一个动态游标,这样就不会受参数个数和类型的限制了能详细点介绍一下这个方法么,谢谢
      

  5.   

    不知道能不能满足你的要求:
    如下:
    function:
    create or replace function sql_test (sql_str varchar2) return SYS_REFCURSOR is
      po_return sys_refcursor;
    begin
      open po_return for sql_str;
      return(po_return);
    end ;
    测试:declare
     cur1 SYS_REFCURSOR;
     v_dual varchar2(40);
     i number;
     begin
       v_dual:='select 1 id from dual';
    cur1:=sql_test(v_dual);
     fetch cur1 into i;
     dbms_output.put_line('----------------i :'||i);
     close cur1; end;
     
      

  6.   

    问题基本解决,用proc编程实现,可以满足未知参数输出(参数个数和参数类型),谢谢各位的回复。