我想通过存储过程做数据考核,定义了个配置表,里面是 sql 查询语句,该表是可维护的,数据条数不定,每条语句的表名和查询的字段个数都是不同的,例如:
select name, id from students; 或者 select age, height, weight from children;等等。
我想动态的执行这些sql语句,然后取出每条语句执行后的结果集里的每条数据的每个字段逐一校验,比如我想可以通过动态cursor或者别的方法实现,请问怎样做,谢谢!

解决方案 »

  1.   

    tcol := case when ai_col=0 then 'sum(zwfzye_dqye)' when ai_col=1 then 'sum(zwfzye_jffs)' else 'sum(zwfzye_dffs)' end;  tsql := ' select '||tcol||' from ZWFZYE'||ai_year ||
                ' where  ZWFZYE_KMBH=:kmbh and ZWFZYE_KJQJ=:kjqj and ZWFZYE_DWBH=:dwbh and to_number(ZWFZYE_BMBH)=:bmbh';   execute immediate tsql into result using as_km,tmonth,as_org,as_fz;result 为动态返回值
      

  2.   

    比如,你在游标中已经读取到了表名和字段名和条件,分别存入tname和 tcolname,twhere  变量中,然后 动态拼接sql 
    tsql := 'select '|| tcolname ' from ' || ' where ' ||twhere;-- 然后执行这个sql execute immediate tsql into result; --using as_km,tmonth,as_org,as_fz;--result 查询结果  如果使用其他参数,则按位置使用using对应。
      

  3.   

    动态sql拼接可以实现,但是执行了每条动态sql后产生的结果集,每条语句的表名和字段名都是不同的,字段个数也不一致,我要逐条逐个字段的取出,然后校验,请问怎么能把每个字段取出呢?谢谢!
      

  4.   

    重发一下 ,可能写的不全我想通过存储过程做数据考核,定义了配置表是两个表,一个存表名,另一个根据前一个表中的id,存相应的列名。
    ,该表是可维护的,数据条数不定,动态的组成sql语句,每条语句的表名和查询的字段个数都是不同的,例如: 
    select name, id from students; 或者 select age, height, weight from children;等等。 
    我想动态的执行这些sql语句,然后取出每条语句执行后的结果集里的每条数据的每个字段逐一校验,比如我想可以通过动态cursor或者别的方法实现,请问怎样做,谢谢!
    oracle 为 9i
      

  5.   

    execute immediate就是执行动态sql的方法或者用动态游标。
      

  6.   

      type khcurtype is ref cursor;
      khcur khcurtype;  type t_varchar2 is table of varchar2(30) index by binary_integer;
      keys t_varchar2;
    begin 
           selkeyc := 'select ' || key || ' from ' || tabname || ' where ' ||
                       condition;
          
            --获取主键
            if not khcur%isopen then
              open khcur for selkeyc;
              fetch khcur bulk collect
                into keys;
              close khcur;       for i in 1 .. keys.count loop
                keyvalue := keys(i);其中 key 是动态的,如 key= id, name, xm
    这么做只能取出 id, 但是 name, xm 什么的怎么取呢?