CREATE OR REPLACE PROCEDURE PROC_PageDivider
(PERROWS NUMBER:=4,DISPLAYPAGE NUMBER:=1)
--TABLENAME要分页的表名
--PERROWS每页显示的行数
--DISPLAYPAGE要显示的页码
IS
SQL_SELECT VARCHAR2(200); --查询语句
PAGESIZE NUMBER; --页数
TOTALROWS NUMBER; --总共行数
BEGIN
SELECT COUNT(*) INTO TOTALROWS FROM STUDENT; --要用动态SQL
IF TOTALROWS%PERROWS <>0 THEN
PAGESIZE:=TOTALROWS/PERROWS+1;
ELSE
PAGESIZE:=TOTALROWS/PERROWS;
END IF;
SELECT * FROM STUDENT WHERE ID<=(DISPLAYPAGE-1)*PERROWS
MINUS
SELECT * FROM STUDENT WHERE ID<=DISPLAYPAGE*PERROWS;
END;我这样执行怎么会有错:
EXCUTE IMMEDIATE PROC_PageDivider 5,2
(PERROWS NUMBER:=4,DISPLAYPAGE NUMBER:=1)
--TABLENAME要分页的表名
--PERROWS每页显示的行数
--DISPLAYPAGE要显示的页码
IS
SQL_SELECT VARCHAR2(200); --查询语句
PAGESIZE NUMBER; --页数
TOTALROWS NUMBER; --总共行数
BEGIN
SELECT COUNT(*) INTO TOTALROWS FROM STUDENT; --要用动态SQL
IF TOTALROWS%PERROWS <>0 THEN
PAGESIZE:=TOTALROWS/PERROWS+1;
ELSE
PAGESIZE:=TOTALROWS/PERROWS;
END IF;
SELECT * FROM STUDENT WHERE ID<=(DISPLAYPAGE-1)*PERROWS
MINUS
SELECT * FROM STUDENT WHERE ID<=DISPLAYPAGE*PERROWS;
END;我这样执行怎么会有错:
EXCUTE IMMEDIATE PROC_PageDivider 5,2
解决方案 »
- 数据库删除存储过程
- 有关pl\sql调试 设断点,运行至断点处
- 关于在磁盘组中删除其中一块磁盘
- ORACEL sql语句实现根据前条记录的两个字段与下条记录的两个字段值相同时,上条的某个字段值为下条记录的某个字段值。
- oracle透明网关访问大量数据
- oracle 8.5 最初用户密码.主机字符串是什么?是什么?(蔡鸟求救)
- 各位高手能不能帮我解释一下以下几句语句(带*号的)的作用啊???
- 初级问题. SID 和 Schema 的概念是什么?
- 怎样在已建好的表里用sqlplus追加主键(急!!!!!!!!!!!!)
- java 读写 BLOB
- 关于ora-12154的错误!~急
- oracle如何实现往某个ip地址的某个端口写数据?(在线等)
is
type ref_cur is ref ursor;
end;
is
begin
......;
open aa for
SELECT ...
MINUS
SELECT ...;
END;
CREATE OR REPLACE PACKAGE PAGE_PAGE IS
TYPE REF_CUR IS REF CURSOR;
PROCEDURE PROC_PageDivider(PERROWS in NUMBER,DISPLAYPAGE in NUMBER,OUTPUTDATA OUT PAGE_PAGE.REF_CUR);
END PAGE_PAGE;CREATE OR REPLACE PACKAGE BODY PAGE_PAGE AS
PROCEDURE PROC_PageDivider
(
PERROWS in NUMBER, --PERROWS每页显示的行数
DISPLAYPAGE in NUMBER, --DISPLAYPAGE要显示的页码
OUTPUTDATA OUT PAGE_PAGE.REF_CUR --返回的数据集
)
IS
SQL_SELECT VARCHAR2(200); --查询语句
PAGESIZE NUMBER; --页数
TOTALROWS NUMBER; --总共行数
BEGIN
SELECT COUNT(*) INTO TOTALROWS FROM STUDENT;
IF TOTALROWS mod PERROWS <>0 THEN
PAGESIZE:=TOTALROWS/PERROWS+1;
ELSE
PAGESIZE:=TOTALROWS/PERROWS;
END IF;
OPEN OUTPUTDATA FOR
SELECT * FROM STUDENT WHERE ID<=(DISPLAYPAGE-1)*PERROWS
MINUS
SELECT * FROM STUDENT WHERE ID<=DISPLAYPAGE*PERROWS;
END PROC_PageDivider;