有一个存储过程,执行后得到一个结果集,比如A  B   C
3  44   55
22 23   44
11 55   55我想对这个存储过程进行再次筛选,即我想这样select A ,B from 存储过程名称 where A<11请问我应该怎样实现,多谢大哥

解决方案 »

  1.   

    如果你存储过程最后以open cursor的方式返回结果集,你可以在最后的返回结果集中设定条件,如果你在过程中将其插入到数据表中可以直接查询表,建议可以使用临时表,这样不会引起个人使用的时候查询不一致问题.
      

  2.   

    把存储过程改成function
    function return table variable然后
    select * from tablevariable进行筛选
      

  3.   

    oracle好像无法返回table variable
      

  4.   

    试一下下面的这个方法假设你的存储过程返回的是一个pl/sql表:t_databeginsqlStrTemp varchar2(5000);
      
      FOR index IN 1..t_data.COUNT-1 LOOP
         
            IF sqlStrTemp IS NULL THEN
                sqlStrTemp := sqlStrTemp 
                || 'SELECT * FROM ('
                || ' SELECT ' || '''' 
                || t_data(v_index).A || '''' || ' AS A' || ',' 
                || '''' || t_data(v_index).B || '''' || ' AS B'  || ','
                || || '''' || t_data(v_index).C || '''' || ' AS C' 
                || ' FROM DUAL';
            ELSE
                sqlStrTemp := sqlStrTemp 
                || ' UNION ALL ' 
                || t_data(v_index).A || '''' || ' AS A' || ',' 
                || '''' || t_data(v_index).B || '''' || ' AS B'  || ','
                || || '''' || t_data(v_index).C || '''' || ' AS C' 
                || ' FROM DUAL';
            END IF;
       END LOOP;    sqlStrTemp := sqlStrTemp || ') TEMP_DATA WHERE A<11';    EXECUTE IMMEDIATE sqlStrTemp BULK COLLECT INTO V_T_DATE(你想返回的记过集表)
    exception when others then
        null;
    end;