首页 新闻 搜索 专区 学院

oracle执行存储过程的问题,简单问题

0
悬赏园豆:50 [已关闭问题] 关闭于 2013-05-15 16:48

一直用mssql的 ,最近接了一个oracle项目,只是操作数据库进行数据读取的。一些简单语句都搞定了。现在调用存储过程的时候总是出错,谁明白给看看呗。

 

分页方法:

procedure GetDataByPage(
    p_tableName varchar2,--要查询的表名
     p_fields varchar2,--要查询的字段
     p_filter varchar2,--过滤条件
     p_sort varchar2,--排序字段及方向
     p_curPage number,
    p_pageSize number,
    --p_cursor out t_cursor,
    p_totalRecords out number
 )
 is
     v_sql varchar2(1000):='';
     v_startRecord number(4);
     v_endRecord number(4);
begin
  --获取总的记录数
  v_sql:='select to_number(count(*)) from '||p_tableName;
  if p_filter is not null then
    v_sql:=v_sql||' where 1=1 and '||p_filter;
  end if;
  execute immediate v_sql into p_totalRecords;

  v_startRecord:=(p_curPage-1)*p_pageSize;
  v_endRecord:=p_curPage*p_pageSize;

  v_sql:='select '||p_fields||' from (select '||p_fields||',rownum r from '||
         '(select '||p_fields||' from '||p_tableName;
  if p_filter is not null then
    v_sql:=v_sql||' where 1=1 and '||p_filter;
  end if;
  if p_sort is not null then
    v_sql:=v_sql||' order by '||p_sort;
  end if;
  v_sql:=v_sql||') A where rownum<='||to_char(v_endRecord)||') B where r>='||to_char(v_startRecord);
  --open p_cursor for v_sql;
  execute immediate v_sql;

 end GetDataByPage;

 

调用分页的另外一个存储过程:

  procedure getBusinessDetails(businessId varchar2,pageNum integer,allPageNum out integer)
    is
    t_name varchar2(1000):='';
    fields    varchar2(1000):='';
    begin
      select tablename into t_name from cus_business where code = businessId;
      --select * from cus_tablefields where tablename=t_name;
      sky.GetDataByPage(t_name,fields,'','','id desc',pageNum,150,allPageNum);

    end getBusinessDetails;

 

加粗的那一句有问题。提示调用错误,我也不知道怎么弄了。谁给讲讲吧。

追加一个问题。

oracle 变量循环累加,类似sql下面的语句 declare @fields nvarchar(2000) select @fields =fname +','+@fields from tablename
换成Oracle需要怎么写呢?

迷路中的路人甲的主页 迷路中的路人甲 | 初学一级 | 园豆:93
提问于:2013-05-11 22:00
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册