SELECT *
FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
FROM emp
WHERE ROWNUM<=3) temp
WHERE temp.rn>=1;
SELECT *
FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
FROM emp
WHERE ROWNUM<=6) temp
WHERE temp.rn>=4;
显示第三页,每页显示三条数据
SELECT *
FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
FROM emp
WHERE ROWNUM<=9) temp
WHERE temp.rn>=7;
通过以上三个例子我们可以总结出知道了当前页(cp)和每页显示的数据量(ls),就可以计算出要从数据库中第m条查询到第n条数据的公式:
m=(currentPage-1) * lineSize+1
n=currentPage * linesSize
SELECT* FROM emp LIMIT m,ls
SELECT * FROM emp LIMIT 0,3
SELECT * FROM emp LIMIT 3,3
SELECT * FROM emp LIMIT 6,3
m = (currentPage - 1) * lineSize
ls = lineSize
SELECT * FROM 数据表 LIMIT m,n
优化性能:
PL/SQL以整个语句块发送给服务器,这个过程在单次调用中完成,降低了网络拥挤。而如果不使PL/SQL,每条SQL语句都有单独的传输交互,在网络环境下占用大量的服务器时间,同时导致网络拥挤。
可重用性:
PL/SQL能运行在任何ORACLE环境中(不论它的操作系统和平台),在其他ORACLE能够运行的操作系统上无需修改代码。
模块化:
每个PL/SQL单元可以包含一个或多个程序块,程序中的每一块都实现一个逻辑操作,从而把不同的任务进行分割,由不同的块来实现,块之间可以是独立的或是嵌套的。
BEGIN --表示开始过程
NUULL; --过程代码
END; --过程结束
/
输出 ‘hello world’
--开启打印功能 SET SERVEROUTPUT ON; BEGIN --表示开始过程 DBMS_OUTPUT.put_line('hello world'); --过程代码 END; --过程结束 /
定义变量
DECLARE v_num NUMBER; --声明一个全局变量 BEGIN --表示过程开始 DBMS_OUTPUT.put_('变量的值是:'|| v_num); --过程代码 END; --过程结束 /
字符串的连接使用的不是‘+’而是‘||’
全局变量的声明放在DECLARE关键字之后
如果声明了变量但是没有赋值则默认是空
为变量赋值:
DECLARE v_num NUMBER; --定义了变量 BEGIN --表示过程开始 v_num:=30; --为变量赋值 DBMS_OUTPUT.put_('变量的值是:'|| v_num); --过程代码
END; --过程结束
/
上面为变量赋值代码可以在DECLARE后面声明变量的时候给出默认值,如果在BEGIN 之后没有为变量赋新的值,则按照默认值输出。
下方是一个完整代码示例:
根据雇员的编号查询出雇员的名字,要求编号从键盘输入。
DECLARE
v_empno NUMBER; --保存雇员编号
v_ename VARCHAR2(100); --保存编号
BEGIN --表示开始过程
--在键盘输入雇员编号
DBMS_OUTPUT.put_line('请输入编号:');
v_empno:=&empno;
--开始查询
SELECT ename INTO v_ename
FROM emp
WHERE empno=v_empno;
DBMS_OUTPUT.put_line('编号是:'||v_empno || ' 名字是:'||v_ename); --过程代码
END; --过程结束
/
//*********************************************分割线***************************************************//