有一个存储过程,如下:
create or replace procedure fenye
(tableName in varchar2,--表名
v_pagesize in number,--每页显示记录数
pagenow in number--当前页
) is
--定义一个变量用来传sql语句。
v_sql varchar2(1000);
--定义2个整数,开始和结束行号
v_beginnum number:= (pagenow-1)*v_pagesize+1;
v_endnum number:= pagenow*v_pagesize;
myrows number;--总记录数
mypagecount number;--总页数
p_cursor mypack2.my_cursor2; --返回的记录集
v_empno emp.empno%type;
v_ename emp.ename%type;
v_job emp.job%type;
v_mgr emp.mgr%type;
v_hiredate emp.hiredate%type;
v_sal emp.sal%type;
v_comm emp.comm%type;
v_deptno emp.deptno%type;
begin
v_sql:=*select empno,ename,job,mgr,hiredate,sal,comm,deptno from (select t1.*,rownum rn from (select * from *||tableName||*) t1 where rownum=*||v_beginnum;
--把游标和sql语句关联
open p_cursor for v_sql;
--计算myrows 和 mypagecount
--组织一个sql
v_sql:=*select count(*) from *||tableName;
--执行sql,并把返回的值,赋给myrows
execute immediate v_sql into myrows;
--计算mypagecount,mod是取模函数。
if mod(myrows,v_pagesize)=0 then
mypagecount:=myrows/v_pagesize;
else
mypagecount:=ceil(myrows/v_pagesize);--ceil(x)向大数取整,floor向小的取整。
end if;
loop
fetch p_cursor into v_empno,v_ename,v_job,v_mgr,v_hiredate,v_sal,v_comm,v_deptno;
exit when p_cursor%notfound;
dbms_output.put_line(*姓名*||v_ename||*工号*||v_empno);
end loop;
dbms_output.put_line(*总记录数*||myrows||*总页数*||mypagecount||*当前页*||pagenow);
--关闭游标
--close p_cursor;
end;复制代码一位网友想把begin下面的select语句里把需要查询的换成 * 号,但是exec这个过程就会出错。
emp表中的所有列和上面select的列是一模一样的,就是换成星号会出错,不换就没错。
有人解释说换成select *后有rownum。
我不明白是什么意思,请各位指点一下。
|