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; --過程結束 /
//*********************************************分割線***************************************************//