对表tableName,有一个字段名为field,当field的值含有fieldValue时,将其查找出来,并取出介于startNum和entNum间的记录给records,SQL语句如何写?我的存储过程定义如下:procedure getRecordByUUID(tableName in varchar2, field in varchar2,fieldValue in varchar2,startNum in integer,entNum in integer,records out SYS_REFCURSOR) ;

解决方案 »

  1.   

    建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   

    procedure getRecordByUUID(tableName in varchar2, field in varchar2,fieldValue in varchar2,startNum in integer,entNum in integer,records out SYS_REFCURSOR)
    asbegin
    open records for
    select *
    from
    (
    select field,rownum row_num from tablename where field like '%'||fieldValue||'%';
    )t
    where row_num between startNum and entnum;end;
    /
      

  3.   

     谢谢duqiangcise的回答。我在pl/sql developer中测试了一下,报错丫。麻烦一下,能不能再修改修改
      

  4.   

    我修改了一下,但是存储过程在pl/sql developer中报错。代码如下:  procedure getRecordByUUID(tableName in varchar2, field in varchar2,fieldValue in varchar2,
                                startNum in integer,entNum in integer,records out SYS_REFCURSOR) is
          p_str varchar2(1000);
      
          begin  
                      open records for
                          select * from (select t.*,rownum rn from ' ||tableName|| ' t 
                                         where ' ||field|| ' like  '%' ||fieldValue || '%';)
                              where rn>=  stratNum and rn <= entNum;  
            
          end;    
    end plan_searchTable;
      

  5.   

    procedure getRecordByUUID(tableName in varchar2, field in varchar2,fieldValue in varchar2, 
                                startNum in integer,entNum in integer,records out SYS_REFCURSOR) is 
          p_sql varchar2(1000); 
          p_sql:='select * from (select t.*,rownum rn from '||tableName||' t '||'where '||field||'  like  '||chr(39)||'%'||fieldValue||'%'||chr(39)||' )where rn>= '||stratNum|| ' and rn <= '||entNum||';';
          begin  
                      open records for p_sql;
            
          end;    
    end plan_searchTable;