一直用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需要怎么写呢?