存储过程问题: 
在线等,很难,答出来立即给分。 
现在要求是传入一个查询SQL语句,返回这个SQL语句的结果。 
前提:SQL语句查询的项目数根据SQL语句不同而不同。SQL语句中可能有函数,子查询等等。非常复杂。 SQL查询出来的数据,要一项一项的检查,发现前两个字符等于“DD”就把这项的值变成“SSS”. 
把改变后的结果集用   sys_refcursor   传出来。 我已经想到一部分,但是做不下去了。请大家多多帮忙,解决立即给分,高手们加油阿: function   fun_test(in_sql   in   varchar2,   out_refcur   out   ref_cur)   return   number   is 
        v_sql               varchar2(400); 
        v_CursorID     integer; 
        v_Dummy           INTEGER; 
        v_ReturnRow   INTEGER; 
        l_columnValue         VARCHAR2(4000); 
        v_errmsg         varchar2(20); 
        l_descTbl               dbms_sql.desc_tab; 
        l_colCnt                 number;     begin 
        v_sql             :=   in_sql; 
        v_CursorID   :=   DBMS_SQL.OPEN_CURSOR; 
        DBMS_SQL.PARSE(v_CursorID,   v_sql,   DBMS_SQL.native); 
        dbms_sql.describe_columns(   v_CursorID,   l_colCnt,   l_descTbl   ); 
        
        
        for   i   in   1   ..   l_colCnt   loop 
                dbms_sql.define_column(v_CursorID,   i,   l_columnValue,   4000); 
        end   loop;         v_Dummy   :=   DBMS_SQL.EXECUTE(v_CursorID); 
        
        loop 
            v_ReturnRow   :=   DBMS_SQL.FETCH_ROWS(v_CursorID); 
            if   v_ReturnRow   =   0   then 
                exit; 
            end   if; 
            for   i   in   1   ..   l_colCnt   loop 
                DBMS_SQL.COLUMN_VALUE(v_CursorID,   i,   l_columnValue); 
                if   not   l_columnValue   is   null   then   
                    if   length(l_columnValue)   >   2   and   substr(l_columnValue,1,2)   =   'DD'   then 
                        l_columnValue   :=   'SSS'; 
                    end   if; 
                end   if; 
            end   loop;   
        end   loop; 
    
        DBMS_SQL.CLOSE_CURSOR(v_CursorID); 
    
--         open   out_refcur   for   v_sql;     exception   
        when   others   then 
            v_errmsg   :=   sqlerrm;     end;